Javascript 在gui.window.open()之后未设置window.opener
我目前正在使用node webkit构建应用程序,在打开新窗口时遇到一些问题 我的应用程序中发生的基本情况是: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
- 打开splash.html(启动屏幕)
- 使用gui.Window.Open()打开主应用程序(main.html),但将其隐藏
- 在“loaded”事件中,关闭第一个窗口(splash.html)并显示main.html
- 在应用程序中,我可以撰写一封电子邮件,创建一个新窗口(composer.html)
- 用户单击compose按钮->用gui打开composer.Window.open()
- compose窗口的逻辑依赖于主窗口,通过window.opener访问主窗口
- 打开窗口后将窗口开启器设置为当前窗口=>失败
- 转到第一个打开的窗口(package.json中定义的窗口)调用open()=>Fail
<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();
});