【发布时间】:2014-05-28 05:01:17
【问题描述】:
我目前正在使用 node-webkit 构建一个应用程序,但在打开新窗口时遇到了一些问题。
我的应用中发生的基本上是:
-
打开 splash.html(启动画面)
- 使用 gui.Window.open() 打开主应用程序 (main.html) 但将其隐藏
- 在 'loaded' 事件中,关闭第一个窗口 ( splash.html ) 并显示 main.html
-
在应用程序中,我可以撰写一封电子邮件,创建一个新窗口 (composer.html)
- 用户点击撰写按钮 -> 使用 gui.Window.open() 打开撰写器
撰写窗口的逻辑依赖于主窗口,通过 window.opener 访问主窗口
这在使用常规浏览器时非常有效,但是当我将它捆绑在 node-webkit 中时,window.opener 大多是未定义的。我说主要是因为有时(~10%)开瓶器是在撰写窗口中设置的。 我试图找出问题所在,但在这个主题上搜索并没有真正帮助我。
我尝试过的事情:
- 在打开窗口后将窗口打开器设置为当前窗口 => 失败
- 下到第一个打开的窗口(在 package.json 中定义的那个)调用 open() => 失败
如果有人对如何解决此问题有任何提示,将不胜感激。如果需要,我很乐意提供更多详细信息。
[编辑]
这里是相关代码:
第一个窗口(闪屏),由 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>
应用程序中有很多东西,但这里是打开电子邮件编写器的代码:
NWDesktop.prototype.openAppWindow = function (type, url, title) {
var appWin = nwWin.open(url, {
position: 'center',
toolbar: false,
frame: true,
title: title,
icon: 'favicon.png'
});
};
在打开的窗口中,window.opener 大多是 = undefined。
【问题讨论】:
-
你能分享你的代码吗?一个简单的实验显示 window.opener 对我来说工作正常。如果您可以提供在浏览器中运行但在 node-webkit 中无法运行的代码,我可能会提供帮助,否则会非常棘手。
-
已添加代码,如果您需要更多代码,请告诉我。在一个基本测试中,我还定义了 window.opener,因为它有时会发生在我的代码中,我怀疑某种竞争条件或其他东西,但现在无法弄清楚。
-
抱歉,我没有看到问题所在。你能发布一个显示问题的完整测试用例吗?
-
我认为原因是你关闭了开启窗口然后你要求它。