[英]how to get return value from webview.executeJavaScript in electron
嗨,在我的项目中,我有三个js文件, main.js , browser.js和inject.js ,在browser.js中,我实现了与我的webview相关的所有点击操作和许多功能,从这个我有点击动作到从我在webview中加载的网页获取用户名,我在inject.js中创建了一个函数,从页面获取内容和元素,我在Inject.js文件中获取了值,但在Browser.js文件中我得到了未定义的值
这是我的示例代码:
browser.js
var proName = webview.executeJavaScript('__myInjection.profileName()');
inject.js
profileName : function (){
var recordArray = []
var url
var script = document.createElement("script");
script.src = require('./jquery-3.2.1.min.js');
$(document).ready(function() {
url = $("[data-control-name='identity_profile_photo']").attr("href");
alert(url)
});
return url;
},
在inject.js中调用的值,但browser.js返回未定义的值
不完全确定为什么要将JS代码注入WebView,但为什么不...确保它不是XY问题 。
webview.executeJavascript()
方法不返回任何内容。 您可以将回调作为第三个参数传递(下面有更多内容),但我认为它不会从执行的代码中收到任何内容。
在您注入的代码中,您将创建一个将在页面就绪时执行的回调。 因此,函数返回的任何内容(如url
变量)都不会受到回调代码的影响。 确保您了解如何从异步调用返回响应?
如果我理解正确,您将尝试废弃嵌入页面上的某些数据,并将其发送回渲染器(浏览器)。
实现此结果的更合适的方法是使用electron <webview>
的preload
属性:
<webview src="urlToGuestPage" preload="./inject.js"></webview>
在inject.js
,您可以require(electron)
,并使用电子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')
})
您应该能够在渲染器和Web视图之间找到更详细的此类通信教程,例如https://ourcodeworld.com/articles/read/201/how-to-send-retrieve-information-and-manipulate-the- DOM-从-A-网页视图的与电子的框架
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.