繁体   English   中英

如何从电子中的webview.executeJavaScript获取返回值

[英]how to get return value from webview.executeJavaScript in electron

嗨,在我的项目中,我有三个js文件, main.jsbrowser.jsinject.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问题

  1. webview.executeJavascript()方法不返回任何内容。 您可以将回调作为第三个参数传递(下面有更多内容),但我认为它不会从执行的代码中收到任何内容。

  2. 在您注入的代码中,您将创建一个将在页面就绪时执行的回调。 因此,函数返回的任何内容(如url变量)都不会受到回调代码的影响。 确保您了解如何从异步调用返回响应?

如果我理解正确,您将尝试废弃嵌入页面上的某些数据,并将其发送回渲染器(浏览器)。

实现此结果的更合适的方法是使用electron <webview>preload属性:

<webview src="urlToGuestPage" preload="./inject.js"></webview>

inject.js ,您可以require(electron) ,并使用电子IPC方案( electron.ipcRenderer )在WebviewipcRendrer.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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM