我需要检查用户是否有窗口的焦点,我目前这样做:
var isonfocus=true;
window.onblur = function(){
isonfocus=false;
}
window.onfocus = function(){
isonfocus=true;
}
每当我需要检查用户是否聚焦了窗口时,我只需执行if(isonfocus==true)
。
问题:如果用户在页面加载之前失去焦点,即使我做了if(isonfocus==true)
,它也会返回true,即使窗口没有焦点,将var定义为false var isonfocus=false;
会做相反的事情。
有人能帮帮我吗谢谢
更新
想象一个PTC(付费点击)网站,当你点击一个广告来查看时,大多数网站都会验证用户是否真的看到了广告商网站(有焦点)或没有(失去焦点)。
这与我所需要的类似,我需要一种方法来验证用户是否将窗口(包含iframe)置于焦点上。
为了获得焦点,用户可以点击iframe,文档或标签。
请注意,这需要在所有主要浏览器上工作。
7条答案
按热度按时间fgw7neuy1#
使用
hasFocus
方法:如果您的页面上有
iframe
,则需要单独检查它们:mlnl4t2r2#
您可以使用
document.visibilityState
,它将是'visible'
或'hidden'
,以了解页面是否处于焦点中。llmtgqce3#
为了使它更有效,你需要
var has_focus = false;
并让用户点击页面上的某个地方。hm2xizp94#
此主题中的信息太旧。继续用途:
document.hasFocus()
。现在它将适用于您需要的所有浏览器。浏览器兼容性:https://developer.mozilla.org/en-US/docs/Web/API/Document/hasFocus#browser_compatibility
lxkprmvk5#
如果你不关心Opera的支持,你可以使用
document.hasFocus()
方法得到更好的结果。参见here了解更多信息。pexxcrt26#
**跨浏览器jQuery解决方案!**以下插件将通过您的标准测试,适用于各种版本的IE,Chrome,Firefox,Safari等。并相应地建立声明的方法。它还涉及以下问题:
使用非常简单:
New&improvedversion,madeforbothvanillaandjQueryfoundhere!
fjaof16o7#
如果用户的浏览器窗口处于活动状态,但刚刚点击了刷新按钮(或url栏等),
document.hasFocus()
会告诉你该窗口未激活。但是,您可以调用
window.focus()
并查看是否实际触发了focus
事件。如果是,则浏览器仍处于聚焦/活动状态。