iframe内部加载功能的间隔计数两次且无法停止

时间:2013-06-08 18:49:13

标签: jquery iframe load setinterval clearinterval

我有一个页面在iframe中加载另一个网站。 现在的问题是,如果顶部窗口模糊,我需要记录,如果需要,则需要停止计数器。当您在iframe中单击时,此窗口将被聚焦,并且在悬停后我无法将焦点返回到顶部窗口。因此,当我在浏览器中单击其他选项卡时,它不会调用此窗口的实际模糊功能。 我需要的是一种方法,在点击iframe并将光标移回iframe时,将原始焦点返回到顶部窗口。

我尝试了几种方法来做这样的事情,我在stackoverflow上发现但是没有什么比我更适合。

看起来应该是这样的:

$('iframe').mouseleave(function()
{
    $(window.top).focus();
});
$(window).blur(function()
{
    console.log('window blur'); 
});

编辑替代方法但是clearInterval现在不能正常工作:

因为我没有得到上述代码的答案,所以尝试了一些不同的方法。 我检查了身体,当鼠标离开时它停止了间隔。这对我来说已经足够了。但是因为在iframe加载时启动计数器也很好,我试着把时间间隔放在$('iframe').load函数中。但是会发生的是,inteval会计算两次。如果你想要一个1秒的间隔,它会做2秒。现在,当鼠标离开身体时,它不会停止间隔,而是将其设置回1秒而不是停止。代码下方:

var $interval = '';
$('body').mouseleave(function()
{
    clearInterval($interval);
    $('.message').html('<div class="alert alert-error"><button type="button" class="close" onclick="javascript:window.opener=\'x\';window.close();">×</button>You may not navigate away from advertisements! Click <a href="">here</a> to try again.</div>');
});
$("iframe").load(function()
{
    $interval = setInterval(function()
    {
        clearInterval($interval);
        console.log('clear interval not working when inside iframe load function');
    }, 1000);
});

希望有人知道这里发生了什么。谢谢。

1 个答案:

答案 0 :(得分:0)

更换:

$("iframe").load(function()

有:

document.getElementById("website").onload = function() 

诀窍。

仍然不知道为什么加载函数为每个间隔调用两次内部间隔。如果有人能够解释这一点,那就太好了。无论如何,谢谢。

修改

我想我知道为什么它会循环两次。每次单击iframe(已加载的网站)内的链接时,该功能会将其捕获为页面加载。我做了什么来防止这种情况在第一次iframe加载时添加了一个类,如“iframe_loaded”,并且当用户点击iframe中的链接后,它将首先检查主体是否已经拥有此类,如果是,它将会不再输出间隔功能。