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参数的作用我不清楚,或者说过期时间我没用到。

相关推荐
mCell28 分钟前
AI 时代 SVG 画图的潜力
前端·agent·svg
我命由我123456 小时前
CesiumJS 笔记 - 获取容器中心点、Cartesian3 clone 方法、修改 Cartesian3 对象的高度
前端·javascript·css·前端框架·html·html5·js
Hopebearer_7 小时前
页面突然只剩 DOM?一次静态资源版本错配排查
前端·部署
东风破_7 小时前
ESLint 是什么?为什么你的项目需要它?
前端·后端·代码规范
圣殿骑士-Khtangc9 小时前
Go字符串高效拼接性能对比与底层原理分析
服务器·前端·golang
BigTopOne10 小时前
【ijkplayer】 硬解码流程
前端
kyriewen10 小时前
DeepSeek Harness开源第一天我就上手了——和Claude Code的差距比想象中大
前端·ai编程·deepseek
捡田螺的小男孩10 小时前
什么是 Skill?手把手带你写一个简单有用的 Skill!
前端·后端·程序员
IT_陈寒11 小时前
Redis集群这个坑,差点让我通宵
前端·人工智能·后端
90后的晨仔11 小时前
uni-app 路由跳转与页面导航 —— 终极详解(对标 iOS / Android / 鸿蒙三端原生)
前端