【问题标题】:Node-Webkit start function in different windowNode-Webkit 在不同窗口中的启动功能
【发布时间】:2014-07-11 23:24:00
【问题描述】:

我的 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 定期检查全局变量?

【问题讨论】:

    标签: javascript node.js node-webkit


    【解决方案1】:

    我发现一个非常有效的解决方案是将发布/订阅功能附加到globalvariable。到目前为止我使用的设置是基于 jQuery 的,尽管它也可以在没有的情况下构建。首先它使用this 代码的变体进行初始化:

        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);
    };
    

    【讨论】:

      【解决方案2】:

      您可以使用 Window.eval() 注入和评估一段 JS:

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

      【讨论】:

        猜你喜欢
        • 2016-12-11
        • 1970-01-01
        • 2015-09-27
        • 1970-01-01
        • 2014-06-13
        • 2014-03-16
        • 2013-11-16
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多