我的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
定期检查全局变量?
答案 0 :(得分:3)
我发现一个非常有效的解决方案是将pub / sub功能附加到global
变量。到目前为止我使用的设置是基于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);
};
答案 1 :(得分:0)
您可以使用Window.eval()注入和评估一块JS:
https://github.com/rogerwang/node-webkit/wiki/Window#windowevalframe-script