JavaScript如何将事件用作函数的返回值?

发布于 2022-09-12 02:15:10 字数 899 浏览 13 评论 0

问题场景

做electron项目的时候,需要对大量 外部 webview进行频繁操作,需要向引入的第三方页面里面传递JavaScript脚本代码,同时要获取到代码执行后的返回值。

自己得思路

传递JavaScript到第三方页面这个好说,在electron文档里面用
webview.executeJavaScript(code);函数就可以,获取他的返回值,我的思路是直接获取在控制台打印的数据,在electron文档里也有一个获取控制台消息的事件:

webview.addEventListener('console-message', (e) => {
        console.log('console message:', e.message)
})

问题

现在有一个需求,是将这两个功能封装成一个函数,比如

function sendJavaScriptCode(webview,code){
    
}

参数1传入webview对象,code传入要传递的JavaScript脚本代码,然后这个函数的返回值就是在console获取到的信息。

可是,我不知道怎么把一个事件封装到函数里,让函数可以直接返回一个事件的传过来的值。

我刚刚接触这一块,正在恶补js基础,但是要学习的东西实在太多,这个需求马上就要了。有了解的大佬希望可以帮我解决一下这个问题,尽量用通俗易懂的方式。小弟在此感激不尽!

另外附上electron文档地址:https://www.electronjs.org/do...

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

白云悠悠 2022-09-19 02:15:10

问题的本质在于,获取console信息是一个异步过程,所以你的函数是不可能同步返回e.message的,可以选择返回一个Promise,或者将函数写成async/await

举个Promise版本的例子:

function sendJavaScriptCode(webview, code) {
  return new Promise((resolve, reject) => {
    webview.addEventListener("console-message", (e) => {
      resolve(e);
    });
  });
}

// 使用
sendJavaScriptCode(webview, code).then((e) => {
  console.log(e.message);
});
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文