如何使用JavaScript处理启动应用程序确认框

问题描述

当浏览器选项卡未聚焦时,我想更改视图。我使用window.onblur事件来处理这种情况,但是有一个我想处理的用例。

当启动应用程序确认框出现时,窗口触发模糊事件,但用户仍在页面中,因此我不想更改页面上的视图。仅当用户切换其他窗口或选项卡时,才应更改视图。

启动应用程序确认框示例

enter image description here

我已经搜索了启动应用程序确认的事件以及窗口,导航器和文档对象中的对象,但是我没有找到任何相关的对象,功能或事件。另外,我还在mdn上搜索了特定的API来实现此目的,但找不到解决此问题的任何方法

如果您知道有关启动确认框的任何文档,请与他人共享。如果能以另一种观点解决我的用例,我将不胜感激。

解决方法

这可以通过处理visibilitychange事件而不是下面的blur来解决。

document.addEventListener("visibilitychange",function() {
    //Change your view here
});

有关here的更多详细信息。请注意,还有特定于浏览器的事件。

"visibilitychange"
"msvisibilitychange"
"webkitvisibilitychange"

以防万一,当用户从浏览器中单击并保持网站可见时,您还希望处理这种情况。改为处理blur事件。

但是,现在,“启动应用程序弹出窗口”也会使窗口模糊,需要专门处理。它不会触发任何要处理的事件

我们可以快速解决该问题。
这个想法基于以下两种行为,

  1. 触发此弹出式窗口的链接将不会以http或https开头。例如,缩放使用以zoommtg://开头的网址来启动本机应用程序。
  2. 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;
           }
    }