【问题标题】:In nw.js(node-webkit), how node-main : node.js access any windows?在 nw.js(node-webkit) 中,node-main : node.js 如何访问任何窗口?
【发布时间】:2015-12-09 16:41:27
【问题描述】:

如果package.json中的窗口A打开一个新窗口B,node-main如何访问呢? 这是我的代码:

package.json

 {
      "main": "index.html",
      "name": "Hello NW.js",
      "node-main": "nodemain.js",
      "window": {
        "toolbar": true 
      }
 }

index.html

  <body>
    <script src="test.js">
    </script>
  </body>
</html>

test.js

var gui = require('nw.gui'); 
var win = gui.Window.get();
var testval = "window1"
var test = function()
{
    alert(testval);
};
gui.Window.open ('index2.html', {});

index2.html

<html>
  <body>
    <script src="test2.js">
    </script>
  </body>
</html>

test2.js

var gui = require('nw.gui'); 
var win = gui.Window.get();

var testval = "window2";
var test = function()
{
    alert(testval);
};

这里是 nodemain.js

setTimeout(function() {
  var gui = window.require('nw.gui');
  gui.Window.get().test();
}, 1000);

当我开始时,有一个警告窗口说:window1。如何让 index2.html 中包含的 test2.js 中的 is 调用函数,让警报窗口说:window2?

【问题讨论】:

    标签: node.js node-webkit nw.js


    【解决方案1】:

    从nodemain.js 访问窗口对象的更好方法是您应该在窗口加载时将窗口对象的引用保存在nodemain.js。这是因为节点主脚本先启动,然后再打开窗口。

    因此,在您的test.js 中,您可以调用节点进程并将窗口引用保存在节点上下文中,使用 process.mainModule.exports

    在你的 nodemain.js 中

    var windowMap = {};  //map that will store window references
    
    // exporting this function to access it from process.mainmodule.exports
    exports.saveWindow = function(name, winObj){
        windowMap[name] = winObj;
    }; 
    
    setTimeout(function() {
        windowMap['win1'].test();
        windowMap['win2'].test();
    }, 1000);
    

    在您的test.js 中,您将通过从节点调用saveWindow 方法将Window 引用保存在节点上下文中。此外,您还将在 Window 对象中保存测试函数的引用。

    在 test.js 中

    var gui = require('nw.gui');
    var win = gui.Window.get();
    
    var testval = "window1";
    win.test = function()
    {
        alert(testval);
    };
    
    var win2 = gui.Window.open ('index2.html', {});
    
    // calling saveWindow from node context
    process.mainModule.exports.saveWindow('win1', win);
    process.mainModule.exports.saveWindow('win2', win2);
    

    在 test2.js 中

    var gui = require('nw.gui');
    var win = gui.Window.get();
    
    var testval = "window2";
    win.test = function()
    {
        alert(testval);
    };
    

    nodemain.jssetTimeout调用时,会有Window对象,会成功调用绑定到Window对象的测试方法。

    【讨论】:

      猜你喜欢
      • 2015-07-24
      • 1970-01-01
      • 2014-03-16
      • 1970-01-01
      • 1970-01-01
      • 2015-07-14
      • 1970-01-01
      • 2015-09-27
      • 1970-01-01
      相关资源
      最近更新 更多