Electron23 webview的使用

清空localStorage

渲染进程

1
2
3
4
5
const mwv = this.$refs["mwv"];
if (!mwv) {
return;
}
mwv.executeJavaScript("window.electronAPI.clearLocalStorage();");

预加载脚本

1
2
3
4
5
6
7
8
const { contextBridge } = require("electron");
contextBridge.exposeInMainWorld("electronAPI", {
clearLocalStorage: () => {
// 清空 localStorage
localStorage.clear();
console.log("localStorage 已清空");
},
})

清空Cookie

主进程

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
// 监听来自渲染进程的清除 Cookie 请求
ipcMain.handle("clear-webview-cookies", async () => {
const { session } = require("electron");
return new Promise((resolve) => {
// 查询所有 cookies。删除。
session.defaultSession.cookies
.get({})
.then((cookies) => {
cookies.forEach((cookie) => {
let url = "";
// get prefix, like https://www.
url += cookie.secure ? "https://" : "http://";
url += cookie.domain.charAt(0) === "." ? "www" : "";
// append domain and path
url += cookie.domain;
url += cookie.path;
session.defaultSession.cookies.remove(url, cookie.name, (error) => {
if (error)
console.log(`error removing cookie ${cookie.name}`, error);
});
});
resolve();
})
.catch((error) => {
console.log(error);
});
});
});

渲染进程

1
2
3
const { ipcRenderer } = window.require("electron");

await ipcRenderer.invoke("clear-webview-cookies");

页面不跳转

如果a标签中有target="_blank"的话点击链接并不会打开对应的页面

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
// 拦截所有 a 标签的点击事件
document.addEventListener(
"click",
(e) => {
const target = e.target.closest("a");
if (target && target.href) {
e.preventDefault();
console.log("拦截到了 a 标签的点击事件", target.href);
window.location.href = target.href;
}
},
true
);

// 拦截 window.open
window.open = (url, target) => {
console.log("拦截到了 window.open", url, target);
window.location.href = url;
return null;
};