当前位置: 首页 > 面试题库 >

JavaScript有没有一种方法可以检测浏览器窗口当前是否未激活?

鲁德佑
2023-03-14
问题内容

我的JavaScript会定期进行活动。当用户不查看站点时(即窗口或选项卡没有焦点),最好不要运行。

有没有办法使用JavaScript做到这一点?

我的参考点:如果您使用的窗口未激活,则Gmail聊天会播放声音。


问题答案:

自从最初编写此答案以来,新的规范已达到推荐状态。现在,页面可见性API使我们能够更准确地检测页面何时向用户隐藏。

document.addEventListener("visibilitychange", onchange);

当前的浏览器支持:

  • hrome 13+
  • Internet Explorer 10+
  • Firefox 10+
  • Opera 12.10+ [read notes]

以下代码会退回到不兼容浏览器中不太可靠的模糊/聚焦方法:

(function() {
  var hidden = "hidden";

  // Standards:
  if (hidden in document)
    document.addEventListener("visibilitychange", onchange);
  else if ((hidden = "mozHidden") in document)
    document.addEventListener("mozvisibilitychange", onchange);
  else if ((hidden = "webkitHidden") in document)
    document.addEventListener("webkitvisibilitychange", onchange);
  else if ((hidden = "msHidden") in document)
    document.addEventListener("msvisibilitychange", onchange);
  // IE 9 and lower:
  else if ("onfocusin" in document)
    document.onfocusin = document.onfocusout = onchange;
  // All others:
  else
    window.onpageshow = window.onpagehide
    = window.onfocus = window.onblur = onchange;

  function onchange (evt) {
    var v = "visible", h = "hidden",
        evtMap = {
          focus:v, focusin:v, pageshow:v, blur:h, focusout:h, pagehide:h
        };

    evt = evt || window.event;
    if (evt.type in evtMap)
      document.body.className = evtMap[evt.type];
    else
      document.body.className = this[hidden] ? "hidden" : "visible";
  }

  // set the initial state (but only if browser supports the Page Visibility API)
  if( document[hidden] !== undefined )
    onchange({type: document[hidden] ? "blur" : "focus"});
})();

onfocusin和IE 9及更低版本onfocusout是必需的focus,而其他所有语言都使用onfocusonblur(iOS除外,后者使用onpageshow和)onpagehide



 类似资料:
  • 本文向大家介绍javascript在当前窗口关闭前检测窗口是否关闭,包括了javascript在当前窗口关闭前检测窗口是否关闭的使用技巧和注意事项,需要的朋友参考一下 在当前窗口关闭前,检测当前窗口是否关闭 在ie9中,如果刷新文档的话,unloadform和onbeforeunload都会执行,如果是关闭页面的话只会执行onbeforeunload事件 值得注意的是,onunload在关闭页面时

  • 问题内容: 我需要检测用户是否滚动到页面底部。如果它们在页面底部,则当我在底部添加新内容时,我将自动将它们滚动到新底部。如果它们不在底部,则它们正在阅读页面上较高的内容,因此,我不想自动滚动它们,因为它们希望停留在原处。 如何检测用户是滚动到页面底部还是滚动到页面较高? 问题答案: window.onscroll = function(ev) { if ((window.innerHeight +

  • 问题内容: 如果地理位置下降,我需要JavaScript显示手动输入。 我尝试过的 两者均未描述用户以前是否拒绝访问地理位置。 问题答案: 和两个接受时出现错误时被调用的第二回调。错误回调为错误对象提供了一个参数。对于拒绝的权限,将为(数值)。 例: 编辑:正如@Ian Devlin指出的那样,Firefox(本文发布时为4.0.1)似乎不支持此行为。它将按预期在Chrome和 可能 Safari

  • 问题内容: 在i386 linux上。如果可能,最好在c /(c / posix std libs)/ proc中。如果没有,那么任何程序集或第三方库都可以做到这一点? 编辑:我正在尝试开发测试内核模块是否清除缓存行或整个处理器(与wbinvd())。程序以root身份运行,但我希望尽可能保留在用户空间中。 问题答案: 高速缓存一致性系统会尽最大努力向您隐藏此类信息。我认为您将不得不通过使用性能计

  • 背景:我正在做一些用户界面测试,需要检测人们是否注意到了。但是,这个问题与页面可见性API无关。 具体地说,我想知道如果当前选项卡在不同的浏览器中不活动,或者浏览器窗口不活动,我的Javascript代码将受到怎样的影响。到目前为止,我已经挖掘出以下内容: ios 5在选项卡不活动时暂停javascript 我有以下问题: 除了移动浏览器之外,桌面浏览器是否在选项卡不活动时暂停JS执行?何时以及哪

  • 问题内容: 有没有办法查看所有浏览器窗口是否关闭?我看到,如果您在WebDriver上调用driver.quit()或driver.close(),则sessionId将变为null。有没有办法检查? 我不想调用已关闭或退出的驱动程序,因为它会引发WebDriverException。因此,我想在继续之前检查浏览器的状态。 问题答案: 刚设定 每次您退出浏览器并检查 要么 或收到NullPoint