为什么我的focus()事件没有在我的PWA中触发?

时间:2019-03-10 20:19:33

标签: javascript google-chrome focus service-worker progressive-web-apps

我从未在堆栈上找到问题的答案,但现在有一个我无法解决的答案。

我刚刚将公司内部网转换为PWA。它在我的Android手机上运行良好,但是存在问题。我有一个在单独的窗口中打开的短信和电话组件。这在桌面上效果很好,因为如果窗口已经打开,我只切换了focus(),否则就打开了一个窗口。在移动PWA上,如果窗口未打开,则窗口会正确打开,并且可以从子窗口按名称重新聚焦到打开器。但是,如果我尝试从父窗口(打开器窗口)返回到子窗口,它将无法正常工作,并且无法弄清原因。

代码如下:

// this is the parent
function popupnr(mylink, windowname, refocus) {
// open the window with blank url
if (document.documentElement.clientWidth > 700) {
    thewidth = 700;
}
else {
    thewidth = document.documentElement.clientWidth;
}
openspecs = 'height=' + document.documentElement.clientHeight + ',width=' + thewidth + ',toolbar=1,menubar=1,location=1,status=0';
var mywin = window.open('', windowname, openspecs);

// if we opened the window
if (!refocus || mywin.closed || (!mywin.document.URL) || (mywin.document.URL.indexOf("about") == 0)) {
    transfer = setTimeout(function(){
        mywin.location = mylink;
    }, 400);
}
else if (refocus) {
    mywin.focus();
}

// return the window
return mywin;
}

这是我用来重新关注开瓶器的方法:

bossname = 'waterbase';
window.name = bossname;

// this is the child window:  open on parent, or just focus if the current page of the parent is the target is the same
function popupnr_motherf(mylink) {

mywin = bossname;

if (opener.document.URL.indexOf(mylink) == -1) {
  window.open(mylink,bossname).focus();
}
else {
  window.open('',bossname).focus();
}

} 

我认为这可能与服务人员有关,因为我已经不得不添加第一次打开窗口时在上面代码中看到的400ms延迟,但是我试图在focus(),它什么也不做。有趣的是,我在打开器窗口中还有其他链接,单击这些链接可以在子窗口中正确设置电话号码,只是没有焦点返回到子窗口。任何帮助表示赞赏。

0 个答案:

没有答案