Electron中的webview标签点击网页链接一点反应都没有,怎么办?

原创 野人  2021-10-13 09:01  阅读 167 次

这次使用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>

本文地址:https://www.yerenwz.com/4821.html
版权声明:本文为原创文章,版权归 野人 所有,欢迎分享本文,转载请保留出处!

发表评论