不完全确定为什么要求将JS代码注入WebView,但为什么不…确保它不是
XY problem.
> webview.executeJavascript()方法不返回任何内容.您可以将回调作为第三个参数传递(下面有更多内容),但我认为它不会从执行的代码中收到任何内容.
>在注入的代码中,您将创建一个将在页面就绪时执行的回调.因此,函数返回的任何内容(如url变量)都不会受到回调代码的影响.确保你理解How to return the response from an asynchronous call?
如果我理解正确,您将尝试废弃嵌入页面上的某些数据,并将其发送回渲染器(浏览器).
实现此结果的更合适的方法是使用电子< webview>的preload属性:
在inject.js中,您可以要求(电子),并使用电子IPC方案(electron.ipcRenderer)在Webview(ipcRendrer.sendToHost())和“父”渲染器之间进行通信.你有一个简单的例子:https://electron.atom.io/docs/api/webview-tag/#event-ipc-message
// In embedder page. (parent Renderer / browser.js)
const webview = document.querySelector('webview')
webview.addEventListener('ipc-message', (event) => {
console.log(event.channel)
// Prints "pong"
})
webview.send('ping')
// In guest page. (preload script for the webview / inject.js)
const {ipcRenderer} = require('electron')
ipcRenderer.on('ping', () => {
ipcRenderer.sendToHost('pong')
})