这次使用Electron中的webview标签,遇到了挺多的问题了,好在都能顺利解决,所以觉得有必要记录下。
这次的问题,并没有像上次《在Electron中webview标签没有作用/反应,是怎么回事?》遇到的问题,那么简单,一个配置项的问题,而是需要写点代码了,不过代码的逻辑并不复杂,非常的通俗易懂。
我先给大家讲下,具体是什么的情况,导致Electron中的webview标签点击网页链接一点反应都没有,经过我的排查没有反应的链接,基本上都是需要在新窗口打开的,而在Electron中的webview
标签,对于a
标签含有target=“_blank”
属性是默认拦截的,所以就出现没有反应,打不开新窗口的现象。
知道原因后,就好办多了,看了下官方文档和结合搜索引擎的资料,很快就有了答案,有两种解决方法。
法一:在webview
标签上添加allowpopups
,即可解决,效果就是,对于a
标签含有target=“_blank”
属性就是新窗口打开了,就是回归本性了,具体代码如下:
<webview id="targetSite" src="https://www.baidu.com/" allowpopups ></webview>
法二:监听打开新窗口的动作,然后动态的更改webview
的src值,也实现了跳转,不过不是打开新窗口,还是在原有的窗口上打开,个人是比较喜欢这种的,毕竟多开一个窗口都是有在占用内容的,本身Electron占用的内存就挺大的,窗口越多意味着占用的内存也是越大,所以懂得了把,具体代码如下:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>Document</title> </head> <body> <webview id="targetSite" src="https://www.baidu.com/" allowpopups></webview> <script> const webview = document.getElementById("foo"); webview.addEventListener("new-window", (e) => { const urlClass = new URL(e.url); const { protocol } = urlClass; if (protocol === "http:" || protocol === "https:") { webview.src = e.url; } }); </script> </body> </html>