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