我知道访问 HTML 文档的最佳方法是从渲染器进程中,我应该使用一系列 ipcMain/ipcRenderer 调用从主进程中执行此操作。然而,在这种情况下,我必须从主要部分完成这一切,所以我用
.executeJavascript()
来做这件事
我得到的错误
UnhandledPromiseRejectionWarning: Error: Script failed to execute, this normally means an error was thrown. Check the renderer console for the error.
[1] at WebFrame.e.startsWith.e.startsWith.WebFrame.<computed> [as _executeJavaScript] (electron/js2c/sandbox_bundle.js:67:1601)
[1] at electron/js2c/sandbox_bundle.js:91:463
[1] at electron/js2c/sandbox_bundle.js:75:390
[1] at EventEmitter.<anonymous> (electron/js2c/sandbox_bundle.js:79:757)
[1] at EventEmitter.emit (electron/js2c/sandbox_bundle.js:146:3752)
[1] at Object.onMessage (electron/js2c/sandbox_bundle.js:127:1253)
我尝试过的
[1]
this.webContents.executeJavaScript(`
require('electron').ipcRenderer.send('acquired-page-dom', String(document.body.innerHTML));
`);
ipcMain.once('acquired-page-dom', (ev, html) => {
console.log('~#~#~')
console.log(3)
e.sender.send('got-page-dom', html)
})
没成功。所以我在第二次尝试中尝试将文档作为字符串传递,因为我听说发送的对象必须是可序列化的
[2]
this.webContents.executeJavaScript(`
var html = String(document.body.innerHTML);
require('electron').ipcRenderer.send('acquired-page-dom', document.body.innerHTML);
`)
ipcMain.once('acquired-page-dom', (ev, html) => {
console.log('~#~#~')
console.log(3)
e.sender.send('got-page-dom', html)
})
它给出了同样的错误。
结论
这实际上与
.executeJavascript
函数中的 ipcRenderer 位无关。即使我传递像 .executeJavascript(`alert('hello')`);
这样的简单函数,我仍然会遇到相同的错误。 devTool 没有向该错误消息添加任何内容,所以我真的不知道如何进一步调试它,我陷入了困境。
我收到错误的上下文
仅当我的查看器中加载了网页时,我才会收到此错误。 如果我在我的主页(相当轻)上,我不会收到此错误。
附注 NodeIntegration 也设置为 True:
this.browserView = new BrowserView({
webPreferences: {
preload: `${app.getAppPath()}/build/view-preload.bundle.js`,
nodeIntegration: false,
contextIsolation: true,
sandbox: true,
enableRemoteModule: false,
partition: incognito ? 'view_incognito' : 'persist:view',
plugins: true,
nativeWindowOpen: true,
webSecurity: true,
javascript: true,
},
});
以上问题你找到解决办法了吗?