问题描述
当浏览器选项卡未聚焦时,我想更改视图。我使用window.onblur
事件来处理这种情况,但是有一个我想处理的用例。
当启动应用程序确认框出现时,窗口触发模糊事件,但用户仍在页面中,因此我不想更改页面上的视图。仅当用户切换其他窗口或选项卡时,才应更改视图。
启动应用程序确认框示例
我已经搜索了启动应用程序确认的事件以及窗口,导航器和文档对象中的对象,但是我没有找到任何相关的对象,功能或事件。另外,我还在mdn上搜索了特定的API来实现此目的,但找不到解决此问题的任何方法。
如果您知道有关启动确认框的任何文档,请与他人共享。如果能以另一种观点解决我的用例,我将不胜感激。
解决方法
这可以通过处理visibilitychange
事件而不是下面的blur
来解决。
document.addEventListener("visibilitychange",function() {
//Change your view here
});
有关here的更多详细信息。请注意,还有特定于浏览器的事件。
"visibilitychange"
"msvisibilitychange"
"webkitvisibilitychange"
以防万一,当用户从浏览器中单击并保持网站可见时,您还希望处理这种情况。改为处理blur
事件。
但是,现在,“启动应用程序弹出窗口”也会使窗口模糊,需要专门处理。它不会触发任何要处理的事件
我们可以快速解决该问题。
这个想法基于以下两种行为,
- 触发此弹出式窗口的链接将不会以http或https开头。例如,缩放使用以
zoommtg://
开头的网址来启动本机应用程序。 -
onclick
个事件在onblur
事件之前触发。
因此,在click
事件中引入标记将有助于我们处理此弹出式窗口。
changeViewFlag=true;
window.onblur=function(event){
if(changeViewFlag==true)
{
//Change your view here
}
changeViewFlag=true;
}
window.onclick=function(event){
if(event.target.href!=null &&
event.target.href.split("://").length>1 &&
["http","https"].indexOf(event.target.href.split("://")[0])==-1)
{
changeViewFlag=false;
}
}