AngularJS - IE11中的重复源文件

时间:2015-04-01 20:55:51

标签: angularjs forms iframe internet-explorer-11 ie11-developer-tools

我公司创建了一个通用应用程序,可在iframe中启动自定义应用程序。父窗口允许最终用户单击工作清单中的项目,并根据他们点击的内容,导航到启动控制器,该启动控制器将为与任务关联的产品构建网址。然后,我们将该产品应用程序加载到启动视图中的iframe中。

我们看到IE开发人员工具中存在重复的静态内容文件(js和部分模板)。

Image of dev tools

Bundled js as well

每次加载iframe后,我们都会看到该文件的其他副本。由于我们是SPA,因此假设这些文件将被缓存(除了IE之外,它们都在所有浏览器中)。每个文件都从同一个Web服务器提供。我们甚至注意到,如果我们不在js文件的正确实例中设置断点,它就不会被击中。

我们尝试了很多东西,包括在发射控制器内的destroy事件中删除iframe(因为帧被添加到窗口对象,我们认为它永远存在)。我们确保iframe具有有效的ng-src标记,并使用$ sce作为动态创建的URL。

由于我们需要通过表单中的POST加载iframe,我们正在做这样的事情,这是提交POST的超级hacky方式。该片段不会按原样运行,但我想包含有关我们如何填充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的表单,但目前似乎没有任何对我们有效。

如果有人看到这个重复的源文件问题和/或知道在加载控制器时自动提交带有生成输入的表单的正确方法,请帮助我们!

谢谢,

杰克

1 个答案:

答案 0 :(得分:1)

事实证明,如果你没有清除导致这种情况的iframe上的src标签,那么IE如何缓存iframe是一个奇怪的问题。

此问题有助于确定问题: IE8 reloads dynamic iframe content from cache into the wrong iframe

每次加载角度视图时,无论src是否相同,它都会以某种方式将iframe的克隆添加到父窗口。清除我们的角度控制器$destroy上的src标签似乎让IE实际上从dom中删除了节点。我们甚至没有运气就试过$("#productFrame").remove()。删除src attrib也没有用。

有效的是$("#productFrame").attr("src", "").remove();