【问题标题】:Why does my Iframe load its page twice?为什么我的 iframe 会加载其页面两次?
【发布时间】:2017-09-15 23:26:18
【问题描述】:

当我第一次登陆主页时,提琴手显示 iframe 网站加载一次。当我按 F5 或单击返回页面时,它似乎加载了两次网站。

Fiddler 显示第一次有一个符号表示它被中止了。

解释图像上的点

  1. 第一次加载页面时 iframe 页面加载正常(在这种情况下,它是一个 ASP 页面,但它发生在非 ASP 页面上)。
  2. 在 F5 页面刷新时这是我的问题;页面加载,但看起来它被中止了。我试图找出原因。这甚至是一个问题吗?是否会导致在客户端/服务器上使用额外的资源?
  3. 然后页面加载正常。

我的 IFrame 如下所示:

<div class="IframeContainer">
    <iframe class="IframeContent" ng-src="{{::trustSrc(ActiveLink)}}" iframe-onload="iframeLoadedCallBack()" frameborder="0" scrolling="no"></iframe>
</div>

我在 ActiveLink 上有一个观察者,它只会从未定义更改为已定义一次。 但是,我已将日志记录添加到函数 trustSrc 中,它似乎被调用了 3 次。我还不知道为什么。

Iframe 被添加为 app.js 中的模板 URL,如下所示:

.state('Retrieved', {
      url: '/Retrieved',
      templateUrl: 'Scripts/AngularJs/Views/_GenericIframeContainer.html'
  })

我认为因为 iframe 使用的是 ng-src,所以变量会通过摘要循环并被评估。会不会是这个评估导致 iframe 重新加载?

【问题讨论】:

  • 帮助您编辑问题并添加代码

标签: html asp.net angularjs iframe angular-controller


【解决方案1】:

修复方法是更改​​我们使用的 Angular JS(版本 1.4.9)文件。在第 20365 行左右,我们替换了以下内容

attr.$set(name, value);

带有(增加了 10 毫秒的延迟)

setTimeout(function () {
   attr.$set(name, value);
}, 10);

我们也变了

if (msie && propName) element.prop(propName, attr[name]);

if (msie && propName && element[0].tagName !== 'IFRAME') element.prop(propName, attr[name]);

所以这可能是 IE 唯一的问题。 AngularJS 1.6.4 中的代码相同

问题似乎已在此处得到解决:https://github.com/angular/angular.js/issues/9843,但 IMO 未进行修复。

【讨论】:

  • 现在这个解决方案的一个问题是我想知道 iframe 页面何时加载。 iframe-onload="iframeLoadedCallBack()" 被调用两次。有趣的是,Fiddler 只在 Iframe 中显示对请求页面的一次调用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-03
  • 1970-01-01
  • 2023-01-24
  • 2012-07-09
  • 1970-01-01
  • 2012-11-03
相关资源
最近更新 更多