Node-Webkit在不同窗口中的启动功能

Node-Webkit start function in different window

本文关键字:启动 功能 窗口 Node-Webkit      更新时间:2023-09-26

我的node-webkit应用程序由一个控件窗口和一个表示窗口组成。

控制窗口收集数据并最终通过window.open函数启动表示窗口。

表示窗口现在可以访问global变量中的一些信息。

现在我想通过创建SVG元素等来呈现该信息的图形化表示。

我已经有一个javascript函数来做到这一点,但我需要一些方法从控制窗口启动该函数。

我不能直接调用它,因为函数必须访问其他窗口的DOM。

我试过在其他窗口的对象上使用eval函数,但这会导致node-webkit崩溃,消息

[18719:0522/205047:ERROR:breakpad_linux.cc(1225)] crash dump file written to 
/tmp/chromium-renderer-minidump-788bf8d0c68301d5.dmp

最好的方法是什么?

使用setInterval定期检查全局变量?

我发现一个非常有效的解决方案是将发布/订阅功能附加到global变量。到目前为止,我使用的设置是基于jquery的,不过也可以不使用jquery来构建。首先,使用以下代码的变体初始化它:

    var messages = messages || {};
    global.Message = global.Message || function( id ) {
      var callbacks, method,
      message = id && messages[ id ];
      if ( !message ) {
        callbacks = jQuery.Callbacks();
        message = {
          publish: callbacks.fire,
          subscribe: callbacks.add,
          unsubscribe: callbacks.remove
        };
        if ( id ) {
        messages[ id ] = message;
        }
      }
      return message;
    };

那么在windows事件之间的任何地方都可以使用以下模式发布和订阅。一个窗口可以发布数据:

global.Message("someButtonClicked").publish(data);

然后另一个可以监听。

global.Message("someButtonClicked").subscribe(onButtonClicked);
function onButtonClicked(data) {
  console.log(data);
};

你可以使用windows .eval():

https://github.com/rogerwang/node-webkit/wiki/Window windowevalframe-script