iFrames并再次检测焦点

时间:2016-05-12 01:33:29

标签: javascript

我一直在苦苦挣扎 - 我有一份基本上是这样的文件:

<html>
    <head></head>
    <body>
        some divs and stuff

        <div id="content">
            <iframe src="" id="content_frame"></iframe>
        </div>
    </body>
</html>

这个特定页面的重要之处在于它知道页面上的任何内容何时具有焦点。这实际上非常简单,并且可以使用两个简单的函数:

window.onblur=function(){   // when you leave the window
    if(conn != null) {
        if (document.activeElement == document.getElementById("content_frame")) {               
                    send_message_to_server(JSON.stringify({'type':'upd','ele':'vis','status':true}));
        beep_off(conn.peer);
        } else {
            send_message_to_server(JSON.stringify({'type':'upd','ele':'vis','status':false}));
            beep_on(conn.peer);
        }
    }
};

window.onfocus=function(){  // when you focus the window
    if(conn != null) {
        send_message_to_server(JSON.stringify({'type':'upd','ele':'vis','status':true}));
        beep_off(conn.peer);
    }
};

我遇到的问题是,当选择“iframe”时,它有焦点 - 这意味着当窗口模糊(更改标签或其他)时,iframe仍然在窗口内有焦点,因此会触发类似的消息仍然有焦点。

简而言之,我需要的是:

  • 如果网站的iframe或常规部分具有焦点,则会触发“true”。
  • 如果网站没有任何焦点(他们可能点击了开发者工具,搜索栏,更改了标签等),则会触发“false”。

目前我所拥有的是:

  • 当网站有焦点时,它会触发“真实”。 (良好)
  • 但是,如果iframe具有焦点,然后您更改选项卡,单击开发人员工具或地址栏等,它仍会触发“true”。 (坏)
  • 如果还有其他任何重点,您更改了标签,点击了开发人员工具或地址栏等,则会触发“false”。 (良好)

我也尝试过:

  • 上述代码的许多排列。
  • $( 'IFRAME')为( ':焦点');作为iframe是否具有焦点的标志(这似乎不起作用)。

1 个答案:

答案 0 :(得分:0)

iframe是完全不同的背景。您需要在iframe文档上设置事件处理程序,并使用iframe.postMessagewindow.top等内容将这些事件代理回主窗口。如果您使用postMessage,则需要在父窗口中侦听message个事件并相应地解析这些事件,以确定在iframe内触发的事件。