Javascript 在gui.window.open()之后未设置window.opener

Javascript 在gui.window.open()之后未设置window.opener,javascript,node-webkit,Javascript,Node Webkit,我目前正在使用node webkit构建应用程序,在打开新窗口时遇到一些问题 我的应用程序中发生的基本情况是: 打开splash.html(启动屏幕) 使用gui.Window.Open()打开主应用程序(main.html),但将其隐藏 在“loaded”事件中,关闭第一个窗口(splash.html)并显示main.html 在应用程序中,我可以撰写一封电子邮件,创建一个新窗口(composer.html) 用户单击compose按钮->用gui打开composer.Window.o

我目前正在使用node webkit构建应用程序,在打开新窗口时遇到一些问题

我的应用程序中发生的基本情况是:

  • 打开splash.html(启动屏幕)

    • 使用gui.Window.Open()打开主应用程序(main.html),但将其隐藏
    • 在“loaded”事件中,关闭第一个窗口(splash.html)并显示main.html
  • 在应用程序中,我可以撰写一封电子邮件,创建一个新窗口(composer.html)

    • 用户单击compose按钮->用gui打开composer.Window.open()
  • compose窗口的逻辑依赖于主窗口,通过window.opener访问主窗口

使用常规浏览器时,这非常好,但当我将其捆绑到节点webkit中时,window.opener基本上是未定义的。我之所以这么说,主要是因为有时候(~10%)开瓶器是在compose窗口中设置的。 我试图找出问题出在哪里,但在这个问题上谷歌搜索并没有真正帮助我

我尝试过的事情:

  • 打开窗口后将窗口开启器设置为当前窗口=>失败
  • 转到第一个打开的窗口(package.json中定义的窗口)调用open()=>Fail
如果有人对如何解决这个问题有任何提示,我们将不胜感激。如果需要,我很乐意提供更多细节

[编辑]

以下是相关代码:

第一个窗口(启动屏幕),由package.json打开

<html>
  <script>
  var gui = require('nw.gui');
  var config = require('./config.json');
  gui.App.clearCache();
  var nwWin = gui.Window

  var appWin = nwWin.open(config.url, {
    title : 'MyApp',
    show : false,
    toolbar : false,
    frame : false,
    icon : 'favicon.png',
    width : 1000,
    height : 600,
    min_width : 1000,
    min_height : 400,
    position : 'center'
  });

  appWin.on('loaded', function () {
    appWin.show();
    appWin.focus();
    appWin.setAlwaysOnTop(true);
    appWin.setAlwaysOnTop(false);
    nwWin.get().close();
  })
  </script>

  <body>
    <img src="logo.png" />
  </body>

</html>

在打开的窗口中,window.opener大多=未定义

你需要改变一点:

首先在启动屏幕中:

appWin.on('loaded', function () {
    appWin.show();
    appWin.focus();
    appWin.setAlwaysOnTop(true);
    appWin.setAlwaysOnTop(false);

    nwWin.get().hide();

  })
现在,window.opener不是null或未定义的,您可以在任何地方创建它

我做的其他事情是侦听appWin windows事件,因此,在用户关闭窗口时终止nw的主进程

像这样:

appWin.on('close',function(){
            console.log('CLOSE');
            gui.App.quit();
        });

希望有帮助。

你能分享你的代码吗?一个简单的实验表明window.opener对我来说工作正常。如果您可以提供在浏览器中工作但在node webkit中不工作的代码,我可能会提供帮助,否则会非常棘手。添加代码后,如果需要更多,请告诉我。在一个基本的测试中,我还定义了window.opener,由于我的代码有时会出现这种情况,我怀疑存在某种竞争条件或其他问题,但现在无法解决。对不起,我没有看到问题。你能发布一个完整的测试用例来说明这个问题吗?我认为最重要的是你关闭开启器窗口,然后你要求它。我有一个类似的问题,但这并不能解决它。在我的例子中,
gui.Window.open()
的结果是
未定义的
,即使窗口已经创建。
appWin.on('close',function(){
            console.log('CLOSE');
            gui.App.quit();
        });