带有 browserWindow 和 preload.js 的电子构建器。无法加载预加载脚本

Kai*_*ler 10 preload electron electron-builder

我的 main.js 中的电子生成器和 browserWindows 预加载选项有问题:

// Create the browser window.
  mainWindow = new BrowserWindow({
    x: mainWindowState.x,
    y: mainWindowState.y,
    width: mainWindowState.width,
    height: mainWindowState.height,
    minHeight: 500,
    minWidth: 1000,
    icon: path.join(__dirname, 'icon.ico'),
    frame: false,
    webPreferences: {
      preload: path.resolve(__dirname, 'preload.js'), // <--- PROBLEM
      nativeWindowOpen: true,
      spellcheck: true,
      nodeIntegration: false
    }
  });
Run Code Online (Sandbox Code Playgroud)

启动打包的应用程序后,我收到以下错误:

无法加载预加载脚本:C:\Users[...]\resources\app.asar\preload.js

preload.js 与 main.js 位于同一目录中。

有什么想法可以解决这个问题吗?

亲切的问候,凯W。

小智 5

webPreferences: {
                    frame: false,
                    nodeIntegration: true,
                    enableRemoteModule: true, //this must be true
                    preload: path.resolve(root, 'bridge', 'initialize.js'), 
                }

Run Code Online (Sandbox Code Playgroud)

无法加载预加载脚本,但实际上 initialize.js 出了点问题。在我的文件中,有一个错误,remote.getGlobal 未定义,因为这个 webPreferences.enableRemoteModule 的默认值在 10.x 版本中是 false,所以你必须将它设置为 true。那么它会很好地工作。

  • 为什么要在启用nodeIntegration和remoteModule的情况下进行预加载?通常,当您预加载时,这些会被禁用——这就是预加载的重点。 (3认同)

Kai*_*ler 4

"extraResources": [
  "src/main/preload.js",
  "src/electron-actions/*,"
]
Run Code Online (Sandbox Code Playgroud)

在我的例子中成功了!