我正在使用以下代码
<script type="text/javascript">
var counter = 0;
$('iframe').load(function() {
counter++;
alert("counter : "+counter);
alert("iframe len : "+$('iframe').length);
if (counter == $('iframe').length) {
doRedirect();
}
});
function doRedirect() {
alert("Inside doRedirect");
}
</script>
你可以看到我在上面的代码中加了一些警告。
首先,它在此之后给我提醒counter : 1 and iframe len : 4
警告counter : 2 and iframe len : 4
然后它将继续进行其他操作,他们不会显示警报计数器:3和4根据代码,它也没有来doRedirect
功能。
在我的控制台中,他们给了我以下错误
Load denied by X-Frame-Options: https://demo.testlab.local does not permit cross-origin framing.
所以请帮我解决这段代码的错误。
答案 0 :(得分:0)
每次运行$('iframe')
时,都会发生新的查询。
您应该缓存$('iframe')
查询,因为您现在的处理方式很容易只是您报告的那种事情。从代码开始,我将解释......
$('iframe').load( ...
$('iframe')
是此行时DOM 中<iframe>
个标记的集合,因此您将附加到该集合中的所有iframe标记,并且仅到该集合中的那些人。
稍后在函数正文中,您通过<iframe>
将静态计数器与稍后中DOM 中$('iframe').length
个标记的数量进行比较。调用$('iframe')
会根据DOM的当前状态创建一个新集合,该集合可能与原始集合不同。
因此,这是您遇到麻烦的最可能原因。为什么?因为在您附加load
事件处理程序的时间和此回调触发的时间之间,DOM中的任何内容都可能已更改,包括iframe
标记的数量;例如,如果你有其他脚本做其他事情。
建议修复。
<script type="text/javascript">
var $iframes = $('iframe'),
counter = 0;
$iframes.load(function() {
counter++;
alert("counter : "+counter);
alert("iframe len : "+$iframes.length);
if (counter == $iframes.length) {
doRedirect();
}
});
function doRedirect() {
alert("Inside doRedirect");
}
</script>