即使使用推荐的设置,电子功能也无法从 renderer/preload 脚本中访问
Electron functions are inaccessible from within renderer/preload scripts even with recommended settings
我花了好几天时间阅读票证和文档,试图找到解决这个问题的方法,但没有任何建议奏效。这似乎是一个重大疏忽,或者我完全是个傻瓜。
简单地说,我想做的是从应用程序内部访问电子 api,例如我想要一个按钮,可以单击它来关闭、调整大小等。 window 通过render/preload 脚本中的 BrowserWindow 对象。
我正在通过 electron forge w/webpack 编译它,来自 electron forge 提供的示例回购(而不是单独的 webpack),我有 nodeIntegration: true
、contextIsolation: false
和 enableRemoteModule: true
, package.json
也设置了这些选项。
这是我使用的起始项目:
https://www.electronforge.io/config/plugins/webpack
通过阅读其他票证,通常推荐的方法是通过各种方法要求 remote
模块,获取 window 对象并关闭/执行您的操作。使用时总是 returns null
的问题:
const remote = require('@electron/remote')
const remote = require('electron').remote
const { remote } = require('electron')
我已经尝试了各种来源,但例如这张票中的任何内容都不起作用:
我还阅读了这篇文章,似乎说 remote
模块已被弃用并且不再使用,但是其中的代码也不起作用:https://www.npmjs.com/package/@electron/remote
我已经使用我尝试使用的代码创建了一个 git 存储库:
https://github.com/MajorFailz/electron-problem-example
请帮忙!如果我不能从应用程序内部控制应用程序,我就不能真正继续使用电子开发我的项目。如果我不知何故愚蠢并错过了一些重要或基本的东西,我非常乐意接受,但正如我所说,感觉这些是任何电子新手都需要知道的第一件事,但我迷路了 =/
如果你能给我提供一个我可以看的它工作的可证明的例子,加分。
提前致谢!
编辑:包中的版本
"@electron-forge/cli": "^6.0.0-beta.61",
"@electron-forge/maker-deb": "^6.0.0-beta.61",
"@electron-forge/maker-rpm": "^6.0.0-beta.61",
"@electron-forge/maker-squirrel": "^6.0.0-beta.61",
"@electron-forge/maker-zip": "^6.0.0-beta.61",
"@electron-forge/plugin-webpack": "^6.0.0-beta.61",
"@vercel/webpack-asset-relocator-loader": "^1.7.0",
"css-loader": "^6.5.1",
"electron": "16.0.4",
"node-loader": "^2.0.0",
"style-loader": "^3.3.1"
},
"dependencies": {
"electron-squirrel-startup": "^1.0.0"
}```
感谢@evolutionxbox 的评论,我设法通过以下方法解决了这个问题。
npm run install --save @electron/remote
然后在 main.js 中添加以下行:
require('@electron/remote/main').initialize()
然后最后在主进程中创建 window 时添加:
require("@electron/remote/main").enable(mainWindow.webContents)
现在我在请求 BrowserWindow 对象时得到了它!呜呜呜!
我花了好几天时间阅读票证和文档,试图找到解决这个问题的方法,但没有任何建议奏效。这似乎是一个重大疏忽,或者我完全是个傻瓜。
简单地说,我想做的是从应用程序内部访问电子 api,例如我想要一个按钮,可以单击它来关闭、调整大小等。 window 通过render/preload 脚本中的 BrowserWindow 对象。
我正在通过 electron forge w/webpack 编译它,来自 electron forge 提供的示例回购(而不是单独的 webpack),我有 nodeIntegration: true
、contextIsolation: false
和 enableRemoteModule: true
, package.json
也设置了这些选项。
这是我使用的起始项目: https://www.electronforge.io/config/plugins/webpack
通过阅读其他票证,通常推荐的方法是通过各种方法要求 remote
模块,获取 window 对象并关闭/执行您的操作。使用时总是 returns null
的问题:
const remote = require('@electron/remote')
const remote = require('electron').remote
const { remote } = require('electron')
我已经尝试了各种来源,但例如这张票中的任何内容都不起作用:
我还阅读了这篇文章,似乎说 remote
模块已被弃用并且不再使用,但是其中的代码也不起作用:https://www.npmjs.com/package/@electron/remote
我已经使用我尝试使用的代码创建了一个 git 存储库: https://github.com/MajorFailz/electron-problem-example
请帮忙!如果我不能从应用程序内部控制应用程序,我就不能真正继续使用电子开发我的项目。如果我不知何故愚蠢并错过了一些重要或基本的东西,我非常乐意接受,但正如我所说,感觉这些是任何电子新手都需要知道的第一件事,但我迷路了 =/
如果你能给我提供一个我可以看的它工作的可证明的例子,加分。
提前致谢!
编辑:包中的版本
"@electron-forge/cli": "^6.0.0-beta.61",
"@electron-forge/maker-deb": "^6.0.0-beta.61",
"@electron-forge/maker-rpm": "^6.0.0-beta.61",
"@electron-forge/maker-squirrel": "^6.0.0-beta.61",
"@electron-forge/maker-zip": "^6.0.0-beta.61",
"@electron-forge/plugin-webpack": "^6.0.0-beta.61",
"@vercel/webpack-asset-relocator-loader": "^1.7.0",
"css-loader": "^6.5.1",
"electron": "16.0.4",
"node-loader": "^2.0.0",
"style-loader": "^3.3.1"
},
"dependencies": {
"electron-squirrel-startup": "^1.0.0"
}```
感谢@evolutionxbox 的评论,我设法通过以下方法解决了这个问题。
npm run install --save @electron/remote
然后在 main.js 中添加以下行:
require('@electron/remote/main').initialize()
然后最后在主进程中创建 window 时添加:
require("@electron/remote/main").enable(mainWindow.webContents)
现在我在请求 BrowserWindow 对象时得到了它!呜呜呜!