我的公司创建了一个通用应用程序,可在 iframe 中启动自定义应用程序。父窗口允许最终用户单击工作列表中的项目,并且根据他们单击的内容,我们导航到启动控制器,该控制器将建立与任务关联的产品的 URL。然后,我们将该产品应用程序加载到启动视图中的 iframe 中。
我们看到 IE 的开发人员工具中存在重复的静态内容文件(js 和部分模板)。
每次加载 iframe 后,我们最终都会看到文件的额外副本。由于我们是 SPA,因此假设这些文件将被缓存(它们存在于除 IE 之外的所有浏览器中)。每个文件都由同一个 Web 服务器提供。我们甚至注意到,如果我们不在 js 文件的正确实例中设置断点,它将不会被命中。
我们已经尝试了很多事情,包括在启动控制器的销毁事件中删除 iframe(因为框架被添加到窗口对象,我们认为它永远存在)。我们确保 iframe 具有有效的 ng-src 标记,并为动态创建的 url 使用 $sce。
由于我们需要通过表单的 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 的表单,但目前似乎没有任何东西对我们有用。
如果有人看到这个重复的源文件问题和/或知道在加载控制器时自动提交带有生成输入的表单的正确方法,请帮助我们!
谢谢,
杰克