jQuery iframe加载函数没能正常工作

时间:2017-11-22 11:48:41

标签: javascript jquery iframe

我正在使用以下代码

<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.

所以请帮我解决这段代码的错误。

1 个答案:

答案 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>