首页 > 解决方案 > 如何使用 javascript 处理启动应用程序确认框

问题描述

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

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

启动应用程序确认框示例

在此处输入图像描述

我已经搜索了启动应用程序确认的事件以及窗口、导航器和文档对象中的对象,但我没有找到任何相关的对象、函数或事件。我也在 mdn 中搜索了特定的 API 来实现这一点,但我找不到任何解决这个问题的方法。

如果您知道有关启动确认框的任何文档,请分享。我将不胜感激任何可以从另一个角度解决我的用例的帮助。

标签: javascriptdom-events

解决方案


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

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

更多细节在这里。请注意,也有特定于浏览器的事件。

"visibilitychange"
"msvisibilitychange"
"webkitvisibilitychange"

以防万一,您还想处理用户点击浏览器之外的情况,同时保持网站可见。blur改为处理事件。

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

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

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

推荐阅读