electron程序,js如何跨域通信获得webview中的数据?
发布于 作者:苏南大叔 来源:程序如此灵动~

在上一篇iframe
和webview
的对比中,苏南大叔描述了在electron
中使用webview
标签的话,会获得更大的自主权限。比如,变态需求是:在electron
程序中,嵌入一个远程的第三方页面,并且实时获得这个远程页面里面的数据。这需求够变态吧,在普通的网页领域来说,是绝对不可能完成这个需求的,对吧?但是,这个需求是在electron
程序中运行的,这个需求就有实现的可能性。

本文测试环境:mac
/electron@5.0.8
。
前置阅读
本篇内容,实际上涉及到前面两篇文章,如果两篇文章碰撞后,就基本上是本文中的思路。
- https://newsn.net/say/electron-iframe-vs-webview-xframe.html
- https://newsn.net/say/electron-insert-code.html
当然,本文并不是此需求的最好解决方案,也不会是最佳解决方案。但是,是个新颖的思路。
插入js
在渲染进程中,获得webview
对象。然后,通过此webview
注入js
(executeJavaScript()
)。然后在宿主(渲染进程)中,拿到注入js
的返回值。这个思路就脑回路比较清奇了。

不过,需要特别注意的是:插入的js
语句<code>
的返回值,并不是return
回来的。
比如,下面的这个promise
,就拿不到返回值。注意里面的return
字样。
正确的写法是:
当然,如果非要使用return
的话,还可以这么写:
获取返回值
executeJavaScript()
函数的返回值是个promise
对象。那么,获得返回值的方式,有如下几种:
.then
async
+await
代码总结

范例代码如下:
newsn.net:这里是【评论】可见内容
总结
本文的思路,是几个不同代码知识点的组合。当然,这个并不是electron
跨域通信的最佳方案,但是是个不错的思路,仅供参考。
感谢您支持苏南大叔的原创文章,欢迎点赞转发打赏。更多苏南大叔的electron
相关博客文章,请点击苏南大叔的博客:



学习一下webview跨域通信
烙铁666
优秀了
谢谢大佬
怎么给webview内的window写入方法啊。 不论是iframe 还是使用webview都会出现跨域的问题。
学习
学习
我试了上面的方法,拿不到返回值呀
如果我要监听 到 webview嵌入的点击事件,然后把这个点击到的dom节点信息返回出来,该怎么写。大佬。求指教
打包后webview不可用怎么解决
试一试
nice
不错,感谢,不知道可以修改DOM内容不,我尝试了好像不行
谢谢大佬
666
学习学习
666666
用webview加载页面,子页面无法设置默认的焦点,大佬这个问题如何解决
学习学习
留言,学习