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

x33g5p2x  于 2022-12-16  发布在  Electron
关注(0)|答案(7)|浏览(441)

我的main.js中的electronic-builder和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
    }
  });

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

  • 无法加载预加载脚本:C:\用户[...]\资源\应用程序.asar\预加载.js*

preload.js与main.js位于同一目录中。
有什么办法解决这个问题吗?
致以亲切的问候,凯·W。

imzjd6km

imzjd6km1#

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

无法加载预加载脚本,但实际上我的文件中的initialize.js.有问题,有一个错误,远程.getGlobal是未定义的,因为这个webPreferences.enableRemoteModule的默认值在版本10.x是假的,所以你必须设置为真。然后它会工作得很好。

nbysray5

nbysray52#

"extraResources": [
  "src/main/preload.js",
  "src/electron-actions/*,"
]

在我的情况下成功了!

jum4pzuy

jum4pzuy3#

今天我从电子9.x迁移到了13.1.9,这些解对我没有帮助,我的决定是:
1.预加载文件路径:./src/public/preload.js

  1. background.js
win = new BrowserWindow({
    width: 800,
    height: 600,
    minHeight: 300,
    minWidth: 500,
    webPreferences: {
      preload: path.join(__static, 'preload.js'), // <- static
    },
  });

它是如何工作的?

./src/public中的所有文件都被复制到build文件夹中。但是在electron:serveelectron:build之后- build文件夹具有不同的结构。并且您(或者这只是我的情况)不能使用__dirname。所以需要使用__static
附:大约__statichttps://webpack.electron.build/using-static-assets
另外,electron的另一个示例:

protocol.registerSchemesAsPrivileged([{
  scheme: 'app',
  privileges: {
    secure: true,
    standard: true,
    icon: path.join(__static, 'icon.png'), // <- this
  },
}]);

他们帮我找到了解决方案(使用公共文件夹):https://mmazzarolo.medium.com/building-a-desktop-application-using-electron-and-create-react-app-2b6d127f4fd7

pes8fvy9

pes8fvy94#

抱歉,我回答得太晚了。对我来说,有效的办法是:
预加载. js位置

static
  |- preload.js

main/index.js

win = new BrowserWindow({
  width: 800,
  height: 600,
  minHeight: 300,
  minWidth: 500,
  webPreferences: {
    preload: path.resolve(getElectronApp().getAppPath(), 'preload.js'),
  },
});

和package.json(电子网络包)

"electronWebpack": {
  "main": {
    "extraEntries": [
      "./static/preload.js"
    ],
  },
}
wljmcqd8

wljmcqd85#

preload.js文件添加到files配置中,如下所示:

"build": {
    "files": [
      "./src/preload.js"
    ]
}
qncylg1j

qncylg1j6#

真正起作用的是在process.once('loaded')事件中使用contextBridge。

process.once('loaded', () => {
 contextBridge.exposeInMainWorld('versions', process.versions)
 contextBridge.exposeInMainWorld('API', API) 
})
siv3szwd

siv3szwd7#

webPreferences: {
    webSecurity: false,
    enableRemoteModule: true,
    nodeIntegration: true,
    contextIsolation: false,  // <== important
    preload: path.join(__dirname, 'src/preload.js')
  }

https://github.com/electron/electron/pull/15738

相关问题