You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 05:50:26