electron中设置webview的token数据

版本环境

  • "electron": "^15.1.2",
  • "electron-builder": "^23.6.0",

主要使用的electron的功能是

链接:www.electronjs.org/zh/docs/lat...

具体代码

vue代码页面

  • partition="persist:lk_ffan"关键
  • window.API.lkSetCookie关键
html 复制代码
<style lang="scss" scoped>
.webview-dom {
	width: 100vw;
	height: calc(100vh - 118px);
	transform: translateY(-12px);
	background: #fff;
}
</style>
<template>
	<webview
		ref="webview2"
		class="webview-dom"
		:src="link"
		allowpopups
		partition="persist:lk_ffan"
	></webview>
</template>
<script setup>
import { onMounted, ref } from "vue";
import { useRoute } from "vue-router";

const route = useRoute();
let webview2 = ref(null);

let link = ref(route.query.url);
onMounted(async () => {
	webviewInit();
});

const webviewInit = () => {
	let el = webview2.value;
	el.addEventListener("new-window", (event) => {
		const urlClass = new URL(event.url);
		const { protocol } = urlClass;
		link.value = event.url;
		if (protocol === "http:" || protocol === "https:") {
			webview.value.src = event.url;
		}
	});
	el.addEventListener("dom-ready", () => {
		console.log("dom-ready");

		// el.openDevTools();
	});

	el.addEventListener("did-navigate", async (e) => {
		let finalUrl = e.url; // 获取实际导航到的 URL

		window.API.lkSetCookie(
			{
				partition: el.partition,
				finalUrl: finalUrl,
				token: localStorage.getItem("token1"),
				schoolId: localStorage.getItem("token2"),
			},
			(ee) => {
				console.log(ee);
			}
		);
	});
};
</script>

其他代码

  • 主要是electron的通讯,vue页面想要调用原生的electron方法。
  • 需要借用中间变量window才能调用。
js 复制代码
const { ipcRenderer } = require("electron");

window.API = {
	// webview-setCookie
	lkSetCookie: async (args, callback) => {
		const result = await ipcRenderer.invoke("webview-setCookie", args);
		callback(result);
	},
};
js 复制代码
const { app, BrowserWindow, ipcMain, session } = require("electron");
// 设置cookie
ipcMain.handle("webview-setCookie", async (event, res) => {
        let webviewSession = session.fromPartition('persist:lk_ffan');

        try {
                // 设置一个通用的 cookie,这里使用 '.example.com' 作为 domain,
                // 确保它对所有子域有效,并设置 path 为 '/' 以覆盖所有路径。
                await webviewSession.cookies.set({
                        url: "地址", // 注意这里的点前缀,表示对所有子域有效
                        name: "token1",
                        value: res.token,
                        domain: "跨域地址", // 使用点前缀来涵盖所有子域
                        path: "/", // 根路径,适用于所有路径
                        secure: true, // 如果你的应用只通过 HTTPS 访问,则为 true
                        httpOnly: false,
                        expirationDate: Math.floor(Date.now() / 1000) + 86400 * 30, // 一个月后的 Unix 时间戳
                });


                await webviewSession.cookies.set({
                        url: "地址", // 注意这里的点前缀,表示对所有子域有效
                        name: "token2",
                        value: res.schoolId,
                        domain: "跨域地址", // 使用点前缀来涵盖所有子域
                        path: "/", // 根路径,适用于所有路径
                        secure: true, // 如果你的应用只通过 HTTPS 访问,则为 true
                        httpOnly: false,
                        expirationDate: Math.floor(Date.now() / 1000) + 86400 * 30, // 一个月后的 Unix 时间戳
                });

                console.log(
                        "Cookie has been set for all webviews using the same partition."
                );
        } catch (error) {
                console.error("Failed to set cookie:", error);
        }

        return "设置cookie成功!";
});

反思

我应该写的有问题,我是每次打开一个新的webview就会创建一次partition="persist:lk_ffan"。我观看文档说的是只需要创建一次就可以。但是功能实现了,具体怎么优化,不想看了。。。。expirationDate参数的作用我不清楚,或者说过期时间我没用到。

相关推荐
混血哲谈2 小时前
如何使用webpack预加载 CSS 中定义的资源和预加载 CSS 文件
前端·css·webpack
浪遏3 小时前
我的远程实习(二) | git 持续更新版
前端
智商不在服务器4 小时前
XSS 绕过分析:一次循环与两次循环的区别
前端·xss
MonkeyKing_sunyuhua4 小时前
npm WARN EBADENGINE required: { node: ‘>=14‘ }
前端·npm·node.js
Hi-Jimmy4 小时前
【VolView】纯前端实现CT三维重建-CBCT
前端·架构·volview·cbct
janthinasnail5 小时前
编写一个简单的chrome截图扩展
前端·chrome
拉不动的猪5 小时前
刷刷题40(vue中计算属性不能异步,如何实现异步)
前端·javascript·vue.js
冴羽yayujs5 小时前
SvelteKit 最新中文文档教程(6)—— 状态管理
前端·javascript·vue.js·前端框架·react·svelte·sveltekit
烛阴5 小时前
前端进阶必学:JavaScript Class 的正确打开方式,让你代码更清晰!
前端·javascript
乐闻x5 小时前
如何创建HTML自定义元素:使用 Web Component 的最佳实践
前端·html·web component