0

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

我尝试了几种方法来做我在stackoverflow上找到的类似的事情,但没有什么适合我。

它应该看起来像这样:

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

编辑解决方法但 clearInterval 现在不起作用:

因为我没有得到上述代码的答案,所以我尝试了一些不同的方法。我对身体进行了检查,当鼠标离开时,它停止了间隔。这对我来说已经足够了。但是因为在 iframe 加载后启动计数器也很好,所以我尝试将间隔放在$('iframe').load函数内。但是发生的情况是间隔将计算两次。当您想要 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);
});

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

4

1 回答 1

0

更换:

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

为了:

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

成功了。

仍然不知道为什么 load 函数为每个间隔调用了两次内部间隔。如果有人可以解释这一点,那就太好了。不管怎么说,还是要谢谢你。

编辑:

我想我知道为什么它会循环两次间隔。每次您单击 iframe(已加载的网站)内的链接时,该函数都会将其捕获为页面加载。我为防止这种情况所做的工作是在 iframe 首次加载时向正文添加一个类,例如“iframe_loaded”,并且在用户单击 iframe 内的链接后,它将首先检查正文是否已经具有此类,如果是,它将不第二次输出区间函数。

于 2013-06-09T16:18:14.043 回答