Node-Webkit在不同的窗口启动function
我的node-webkit应用程序由一个控制窗口和一个演示窗口组成。
控制窗口收集数据,并最终通过window.open
函数启动演示窗口。
演示窗口现在可以访问global
variables中的一些信息。
现在我想通过创buildSVG元素等来呈现该信息的graphics表示。
我已经有一个JavaScript函数来做到这一点,但我需要从控制窗口启动该function的一些方法。
我不能直接调用它,因为函数必须访问其他窗口的DOM。
我已经尝试在另一个窗口的对象上使用eval
函数,但是使用消息崩溃了node-webkit
[18719:0522/205047:ERROR:breakpad_linux.cc(1225)] crash dump file written to /tmp/chromium-renderer-minidump-788bf8d0c68301d5.dmp
什么是最好的方法来做到这一点?
使用setInterval
定期检查一个全局variables?
我发现一个非常有效的解决scheme是将pub / subfunction附加到global
variables。 到目前为止我使用的设置是基于jQuery的,但是也可以不用构build。 首先使用此代码的变体进行初始化:
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; };
然后,窗口事件之间的任何地方都可以发布和订阅使用以下模式。 一个窗口可以发布数据:
global.Message("someButtonClicked").publish(data);
然后另一个可以听。
global.Message("someButtonClicked").subscribe(onButtonClicked); function onButtonClicked(data) { console.log(data); };
您可以通过使用Window.eval()注入和评估一块JS:
https://github.com/rogerwang/node-webkit/wiki/Window#windowevalframe-script