NW.js如何在新创建的窗口中使用evalNWBinModule?
主窗口与新窗口的启动差异及解决配置
核心差异点
- 主窗口是NW.js应用的入口窗口,模块解析的基准路径是应用根目录(即
package.json所在的目录),所以./my.js会直接指向根目录下的对应文件。 - 通过
nw.Window.open()创建的新窗口,模块解析基准路径是新窗口加载的HTML文件所在的目录,而非应用根目录。如果新窗口的HTML不在根目录,./my.js就会去HTML所在目录查找,自然找不到目标文件。 - 主窗口默认完全继承应用的Node.js集成权限和模块加载策略,新窗口若未显式配置,可能存在权限或加载规则的限制。
需要做的配置/解决方法
- 使用应用根目录的绝对路径:借助
nw.App.startPath获取应用根目录,拼接出目标文件的绝对路径,避免相对路径的解析偏差:const appRoot = nw.App.startPath; const binPath = `${appRoot}/my.bin`; const jsPath = `${appRoot}/my.js`; nw.Window.get(null).evalNWBinModule(null, binPath, jsPath); import(jsPath); - 显式配置新窗口的Node.js集成:在
nw.Window.open的配置参数中开启Node.js支持,确保新窗口拥有和主窗口一致的模块加载权限:nw.Window.open(MyOtherURL, { nodejs: true, // 强制启用Node.js集成 websecurity: false // 本地文件场景下可关闭安全策略,避免路径解析限制 }, (newWin) => { // 窗口初始化后的操作 }); - 对齐文件路径:如果新窗口的HTML文件在子目录,可将
my.bin和my.js复制到该子目录下,或者使用相对于新窗口HTML的路径(比如../my.js,根据目录层级调整)。
内容的提问来源于stack exchange,提问作者IPcorp
相关产品推荐
相关产品推荐

