我的公司已经创建了一个通用应用程序,可以在iframe中启动自定义应用程序。父窗口允许最终用户点击工作列表中的项目,根据他们点击的内容,我们导航到一个启动控制器,它将建立一个指向与任务相关的产品的url。然后,我们将该产品应用程序加载到启动视图中的iframe中。
我们看到IE的开发工具中存在重复的静态内容文件(js和部分模板)。
Image of dev tools
Bundled js as well
每次加载iframe后,我们最终都会看到文件的其他副本。因为我们是一个SPA,所以假设这些文件会被缓存(除了IE之外的所有浏览器中都有)。每个文件都是从相同的web服务器上提供的。我们甚至注意到,如果我们不在js文件的正确实例中设置断点,它将不会被命中。
我们已经尝试了很多方法,包括在启动控制器中删除销毁事件中的iframe (由于框架被添加到窗口对象中,我们认为它将永远存在)。我们已经确保iframe有一个有效的ng-src标签,并对动态创建的url使用$sce。
因为我们需要通过表单中的帖子加载iframe,所以我们正在做这样的事情,这是提交帖子的一种非常老套的方式。代码片段不能按原样运行,但我想包含有关如何填充我们的iframe的信息。
function launch() {
//return launchService.launch(vm.url, buildLaunchRequest()).then(success, error);
$timeout(function() {
$("#productForm").submit().remove();
}, 1);
}
launch();<div id="launch" class="container-fluid ss-container">
<iframe name="productFrame" id="productFrame" data-ng-src="{{vm.url}}" resize-frame />
</div>
<form id="productForm" role="form" method="post" action="{{vm.url}}" name="productForm" target="productFrame">
<input type="hidden" name="user" ng-value="vm.user" id="user" />
<input type="hidden" name="authToken" ng-value="vm.authToken" id="authToken" />
<input type="hidden" data-ng-repeat="(k,v) in vm.styles" name="{{k}}" value="{{v}}" />
</form>
我确信有更好的方式提交表单,目标是iframe,但目前似乎没有什么对我们有效。
如果任何人看到过这个重复的源文件问题,并且/或者知道在加载控制器时自动提交带有生成输入的表单的正确方法,请帮助我们!
谢谢,
杰克
发布于 2015-04-03 02:09:29
如果你不清除导致这种情况的iframe上的src标签,那就是IE缓存iframe的方式有一些奇怪的问题。
这个问题有助于确定问题:IE8 reloads dynamic iframe content from cache into the wrong iframe
无论src是否相同,每次加载角度视图时,它都会以某种方式将iframe的克隆添加到父窗口。清除我们的角度控制器的$destroy上的src标签似乎会使IE真正从dom中删除节点。我们甚至尝试过$("#productFrame").remove(),但没有任何运气。删除src属性也不起作用。
起作用的是$("#productFrame").attr("src", "").remove();
https://stackoverflow.com/questions/29400640
复制相似问题