为什么我的 Iframe 加载它的页面两次?
Why does my Iframe load its page twice?
当我第一次登陆主页时,fiddler 显示 iframe 站点加载一次。当我 F5 或单击返回页面时,它似乎加载了两次站点。
Fiddler 显示第一次有一个符号表示它已中止。
解释图片上的点
- 页面第一次加载时 iframe 页面加载正常(在本例中它是一个 ASP 页面,但它发生在非 ASP 页面上)。
- F5 页面刷新,这是我的问题;页面已加载,但看起来已中止。我想弄清楚为什么。这甚至是一个问题吗?它会导致在 client/server 上使用额外的资源吗?
- 然后页面加载正常。
我的 IFrame 如下所示:
<div class="IframeContainer">
<iframe class="IframeContent" ng-src="{{::trustSrc(ActiveLink)}}" iframe-onload="iframeLoadedCallBack()" frameborder="0" scrolling="no"></iframe>
</div>
我在 ActiveLink 上有一个观察者,它只从未定义变为已定义一次。
但是,我已将日志记录添加到函数 trustSrc 中,它似乎被调用了 3 次。我还不知道为什么。
Iframe 作为模板 URL 添加到 app.js 中,如下所示:
.state('Retrieved', {
url: '/Retrieved',
templateUrl: 'Scripts/AngularJs/Views/_GenericIframeContainer.html'
})
我认为因为 iframe 使用 ng-src,所以变量会经过摘要循环并被评估。会不会是这个评估导致 iframe 重新加载?
解决方法是更改我们使用的 angular JS(版本 1.4.9)文件。在第 20365 行左右,我们替换了以下内容
attr.$set(name, value);
with(增加了 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 没有修复。
当我第一次登陆主页时,fiddler 显示 iframe 站点加载一次。当我 F5 或单击返回页面时,它似乎加载了两次站点。
Fiddler 显示第一次有一个符号表示它已中止。
解释图片上的点
- 页面第一次加载时 iframe 页面加载正常(在本例中它是一个 ASP 页面,但它发生在非 ASP 页面上)。
- F5 页面刷新,这是我的问题;页面已加载,但看起来已中止。我想弄清楚为什么。这甚至是一个问题吗?它会导致在 client/server 上使用额外的资源吗?
- 然后页面加载正常。
我的 IFrame 如下所示:
<div class="IframeContainer">
<iframe class="IframeContent" ng-src="{{::trustSrc(ActiveLink)}}" iframe-onload="iframeLoadedCallBack()" frameborder="0" scrolling="no"></iframe>
</div>
我在 ActiveLink 上有一个观察者,它只从未定义变为已定义一次。 但是,我已将日志记录添加到函数 trustSrc 中,它似乎被调用了 3 次。我还不知道为什么。
Iframe 作为模板 URL 添加到 app.js 中,如下所示:
.state('Retrieved', {
url: '/Retrieved',
templateUrl: 'Scripts/AngularJs/Views/_GenericIframeContainer.html'
})
我认为因为 iframe 使用 ng-src,所以变量会经过摘要循环并被评估。会不会是这个评估导致 iframe 重新加载?
解决方法是更改我们使用的 angular JS(版本 1.4.9)文件。在第 20365 行左右,我们替换了以下内容
attr.$set(name, value);
with(增加了 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 没有修复。