electron - 为什么 Electron 没有运行我的预加载脚本?
问题描述
我正在尝试使用预加载脚本来解决 Electron 4.2.3 中的CORS 标头问题。但是,我无法运行预加载脚本。一个最小的复制案例:
包.json
{
"name": "your-app",
"version": "0.1.0",
"main": "main.js",
"dependencies": {
"electron": "^4.2.3"
}
}
main.js
const { app, BrowserWindow } = require('electron')
app.on('ready', function() {
const win = new BrowserWindow({
webPreferences: {
preload: `file://${__dirname}/preload.js`,
}
})
win.webContents.openDevTools()
win.loadFile('index.html')
})
preload.js
window.preloadWasRun = 'preload was run'
索引.html
<body>
<script>
document.write(window.preloadWasRun || 'preload was not run')
</script>
</body>
无论我为webSecurity
,nodeIntegration
和使用什么设置contextIsolation
,我的脚本似乎preload
都被忽略了。即使我在脚本中出现语法错误,它也不会在任何地方显示任何错误。
解决方案
原来它必须是绝对路径名,而不是绝对 URL。这些都不起作用:
preload: `file://${__dirname}/preload.js`,
preload: './preload.js',
preload: 'preload.js',
但这像宣传的那样有效:
preload: `${__dirname}/preload.js`,
由于它似乎是文件系统路径而不是 URL,因此使用path.join
奇怪的路径分隔符来解释平台也可能是明智的:
preload: path.join(__dirname, 'preload.js'),
推荐阅读
- roblox - 在 Roblox 中出现错误“Argument 3 missing or nil”
- ssl-certificate - Windows:当证书和私钥在不同的文件中时如何导入?
- r - 在 R 中使用列名并汇总
- javascript - 通过网站获取操作系统级别信息
- javascript - 使用 vuetify 的行中的标题
- android - 无法检测 adb 版本,退出值:0xc000007b
- c - 如何使用 openssl API 获取 DSA 认证密钥大小
- r - 仅在一列中将所有高于 X 的值替换为 NA
- excel - 无法使用 VBA 在 IE 中单击特定的打印按钮
- python - Discord.py 默认值(如果未给出)