电子应用程序:在另一个模块中引用mainWindow对象?
我正在构build一个电子应用程序,其中mainWindow
对象是在快速启动之后创build的: http : //electron.atom.io/docs/tutorial/quick-start/ 。
按照这个快速入门,它是asynchronous创build的。 我遇到的问题是,例如,当我想要从主发送消息到渲染器进程,我需要引用mainWindow
对象。 如果这发生在我需要的模块中,那么我需要一种方法让这个模块知道mainWindow
对象。
我当然可以在global.
预测global.
但是我知道这是非常不利的。 所以我希望更优雅地做。
我碰到这个post: asynchronousnodejs模块导出 ; 似乎提供了一个解决scheme。 从快速main.js
文件(参见上面的链接,在那里明确显示),看来我会添加到createWindow
函数
if( typeof callback === 'function' ){ callback(mainWindow); }
并将main.js
模块导出为
module.exports = function(cb){ if(typeof mainWindow !== 'undefined'){ cb(mainWindow); } else { callback = cb; } }
然后,在更高级的脚本中,我会要求如下:
let main = require('./main.js'); let lib = require('./lib.js'); // Library where I need a mainWindow reference main(function(window) { lib.doSomething(window); });
lib.js
样子
module.exports.doSomething = function(window) { // Do something with window object, like sending ipc messages to it window.webContents.send('hello-from-main', "hi!"); }
虽然在原来的'asynchronousnodejs模块出口'的简单情况下工作正常,我不能像上面描述的那样工作; 运行应用程序,它抱怨Uncaught Exception: TypeError: Cannot read property 'webContents' of null
。 如果我直接要求在main()
的callbacklib.js
,我也知道这也是一种情况。
我承认,我并不完全理解这个post的简单例子,因为我对节点相当陌生。 这阻止了我自己修复它的实现,我同意这是合理地预期会失败的钝拷贝/粘贴。 有人能帮助我如何纠正上述方法,或build议我一个不同的方法,使其工作? 谢谢!
Whooops! 魔鬼是在细节…我已经定义在main.js
let mainWindow = null, callback;
这导致了错误! 应该
let mainWindow, callback;
那么它完美的作品!
与其删除我的post,我select保留并回答自己,以供其他需要asynchronous导出的人员参考。