【问题标题】:How to know if a browser tab focused when it's loaded with Javascript?如何知道浏览器选项卡在加载 Javascript 时是否聚焦?
【发布时间】:2011-03-30 02:23:34
【问题描述】:

有一个类似的问题here。但是当页面初始加载时它不起作用,因为如果例如用户在新选项卡中打开页面并且它没有获得焦点,则不会触发 blur 事件。

那么最好的方法是什么?

目前,我的临时解决方案是假设选项卡在加载时是模糊的,并将一个函数绑定到文档的鼠标悬停事件,将其设置为焦点。但如果用户没有鼠标在页面上,这将不起作用。

【问题讨论】:

    标签: javascript focus


    【解决方案1】:

    借用你链接的代码,将默认设置为模糊:

    <div id="blurDiv"></div>
    
    <script>
    
    var updateStatus = (function() {
    
      // Private stuff
      var el = document.getElementById('blurDiv');
    
      // The updateStatus function
      return function (evt) {
        evt = evt || window.event;
        var evtType = evt.type;
        var state;
    
        // Determine state
        if (evtType == 'load' || evtType == 'blur' || evtType == 'focusout' ) {
          state = 'blurred';
        } else {
          state = 'focussed';
        }
    
        // Now do something...
        el.innerHTML += '<br>' + state
      };
    })();
    
    window.onload = updateStatus;
    
    if (/*@cc_on!@*/false) { // check for Internet Explorer
        document.onfocusin = updateStatus;
        document.onfocusout = updateStatus;
    } else {
        window.onfocus = updateStatus;
        window.onblur = updateStatus;
    }
    
    </script>
    

    IE 似乎触发了许多额外的事件,每次获得焦点时,首先会出现模糊,然后是焦点,因此单击页面中的内容会产生大量虚假的模糊/焦点对。

    【讨论】:

    • 加载时不会检查任何内容。它只是假设它是模糊的。
    • 没有什么要检查的,脚本依赖于冒泡事件。当窗口或文档上的焦点事件在浏览器之间不一致时,没有可靠的方法,但是在第一个之后,它们是可以合理预测的。哦,它与光标无关,它是do wtih focus。您可以通过多种方式更改焦点,而不仅仅是光标。
    • 我所说的是在脚本的开头,您确实需要检查选项卡是聚焦还是模糊,因为在选项卡聚焦或模糊之前事件不会触发。如果选项卡已经聚焦/模糊,那么一开始就不会发生这种情况。您的脚本假定选项卡在加载时总是会模糊。当它并不总是正确的时候。
    • 我的意思是你不能检查,没有什么要检查的。
    • 你是说这个问题无法回答?
    猜你喜欢
    • 2015-11-04
    • 2014-10-28
    • 1970-01-01
    • 2011-11-15
    • 2023-02-26
    • 2022-01-22
    • 2011-04-17
    • 2012-12-23
    相关资源
    最近更新 更多