即使使用推荐的设置,也无法从渲染器/预加载脚本中访问电子函数
Posted
技术标签:
【中文标题】即使使用推荐的设置,也无法从渲染器/预加载脚本中访问电子函数【英文标题】:Electron functions are inaccessible from within renderer/preload scripts even with recommended settings 【发布时间】:2022-01-19 17:22:35 【问题描述】:我花了几天时间阅读票证和文档,试图找到解决此问题的方法,但没有任何建议奏效。这似乎是一个重大疏忽,或者我完全是个傻瓜。
简单地说,我想做的是从应用程序中访问电子 API,例如,我想要一个按钮,可以通过渲染/预加载脚本中的 BrowserWindow 对象单击以关闭、调整窗口大小等.
我通过 electron forge w/ webpack 从由 electron forge 提供的示例 repo 编译它(而不是单独的 webpack),我有 nodeIntegration: true
、contextIsolation: false
和 enableRemoteModule: true
,package.json
也有这些选项设置。
这是我使用的起始项目: https://www.electronforge.io/config/plugins/webpack
通过阅读其他票证,通常推荐的方法是通过各种方法要求 remote
模块,获取窗口对象并关闭/执行您的操作。这个问题在使用时总是返回null
:
const remote = require('@electron/remote')
const remote = require('electron').remote
const remote = require('electron')
我尝试了各种来源,但例如这张票没有任何效果: Atom Electron - Close the window with javascript
我还阅读了这篇文章,似乎说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"
```
【问题讨论】:
你用的是什么版本的电子? "electron": "16.0.4",已更新票证 你在主进程中初始化@electron/remote/main
了吗? npmjs.com/package/@electron/remote#migrating-from-remote
我认为是来自here
啊,我知道了,你必须通过窗口,所以 require("@electron/remote/main").enable(mainWindow.webContents)
在主进程中。啊,终于成功了!谢谢@evolutionxbox,你绝对是明星。
【参考方案1】:
感谢@evolutionxbox 的 cmets,我设法用以下方法解决了这个问题。
npm run install --save @electron/remote
然后在 main.js 中添加以下行:
require('@electron/remote/main').initialize()
最后,当您在主进程中创建窗口时,添加以下内容:
require("@electron/remote/main").enable(mainWindow.webContents)
现在,当我请求它时,我得到了 BrowserWindow 对象!哇!
【讨论】:
以上是关于即使使用推荐的设置,也无法从渲染器/预加载脚本中访问电子函数的主要内容,如果未能解决你的问题,请参考以下文章