NW.js在事件发生时打开一个新窗口并关闭

毛茸茸的芯片

我正在将NW.js v0.12.3迁移到新的NW.js v0.17.3。在我的旧应用中,我曾经打开一个窗口来显示来电通知。如果用户接听了电话或挂断电话,我将基于特殊事件侦听器关闭窗口。

这是我的代码,在v0.12.3中没有问题:

var notificationWin;

window.onload = function () {

    var messageHandler = function(event) {
         if(event.data.key == 'incomingCall'){
            win.requestAttention(1);

            notificationWin = gui.Window.open('notification.html', {  
                frame: false,
                toolbar: false,        
                focus: true,
                icon: "app/imgs/traywinaz.png",
                title:"Incoming Call"
            });

            notificationWin.on ('loaded', function(){
                    ....
            });

      }else if(event.data.key == 'callRejected' || event.data.key == 'callAnswered' || event.data.key == 'callCanceled' ){
            notificationWin.close();
      }
    }

    window.addEventListener('message', messageHandler, false);
}

但是在新版本中,我无法在呼叫被拒绝或已应答事件中关闭窗口。我无法关闭通知窗口。

我的新代码如下所示:

var messageHandler = function(event) {
    if(event.data.key == 'incomingCall'){
        win.requestAttention(1);

        nw.Window.open('app/notification.html', {  
            frame: false,       
            focus: true,
            icon: "app/imgs/traywinaz.png",
            id: "callNotification"
        },  function(new_notification) {

            new_notification.setAlwaysOnTop(true);  
            new_notification.setVisibleOnAllWorkspaces(true);

            new_notification.on ('loaded', function(){
                ....
            });
        });

    }else if(event.data.key == 'callRejected' || event.data.key == 'callAnswered' || event.data.key == 'callCanceled' ){
      try{
        notificationWin =  nw.Window.get('app/notification.html');
        notificationWin.close();
      }catch(e){  
        console.log(e);
      }
    }
};

我只能在回调内获取窗口,所以我也试图在回调内进行如下操作:

notificationWin = new_notification;

但这关闭了我的主窗口:S

关于我在做什么错的任何想法,或者我该如何实现?

文档http://docs.nwjs.io/en/latest/References/Window/#windowgetwindow_object表示Window.get([window_object]),但不知道如何在新版本中获取[window_object]参数。

谢谢!:)

毛茸茸的芯片

回到这一点,我通过将引用保存在de callback中来解决了该问题:“ notificationWin = new_notification;” 然后只调用notificationWin.close();

第一次尝试这样做,它关闭了我的主窗口,但现在可以工作了:)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章