赞
踩
在原有的Vue项目,后端能获取到目标网站的cookie,前端通过携带cookie打开新窗口并完成免登操作。
const { app, BrowserWindow, ipcMain } = require('electron'); // createWindow为工具默认打开的浏览器 const createWindow = () => { const mainWindow = new BrowserWindow({ show: false, webPreferences: { preload: path.join(__dirname, 'preload.js'), nodeIntegration: true, // 设置开启nodejs环境 enableRemoteModule: true, contextIsolation: false, }, }); mainWindow.maximize() // 打开全屏 // 加载指定网址 指向自己的项目地址 mainWindow.loadURL('xxx.com'); mainWindow.show() // 监听打开自定义协议的事件(主要) ipcMain.on('open-third-page', (event, cookie) => { // cookie为事件接收参数 event.preventDefault(); // 发送事件到渲染进程,传递URL参数 createNewWindow(cookie) }); }; // 程序准备好之后触发打开默认页面 app.on('activate', () => { if (BrowserWindow.getAllWindows().length === 0) { createWindow(); } });
const { ipcRenderer } = require('electron');
// 所有的 Node.js API接口 都可以在 preload 进程中被调用.
window.addEventListener('DOMContentLoaded', (e, arg) => {
const replaceText = (selector, text) => {
const element = document.getElementById(selector)
if (element) element.innerText = text
}
for (const dependency of ['chrome', 'node', 'electron']) {
replaceText(`${dependency}-version`, process.versions[dependency])
}
})
// 页面注入ipcRenderer
window.ipcRenderer = ipcRenderer;
如果用electron打开项目地址,则已经通过preload注入ipcRenderer挂在到window,可以通过window.ipcRenderer
来判断当前是否electron环境中,如果判断是,则走electron交互事件的逻辑
handleClick(){
if (window.ipcRenderer) {
// 触发自定义事件
// 事件名要与监听的一致 cookie为向electron发送的参数
window.ipcRenderer.send('open-third-page', cookie)
} else {
// 不在electron环境
}
}
const createNewWindow = (cookieData) => { const partition = Date.now().toString() // session隔离 要设定唯一的string 否则窗口多开的话 const mainWindow = new BrowserWindow({ show: true, webPreferences: { preload: path.join(__dirname, 'preload.js'), // nodeIntegration: true, // 设置开启nodejs环境 enableRemoteModule: true, // enableRemoteModule保证renderer.js可以可以正常require('electron').remote,此选项默认关闭 contextIsolation: true, partition, }, }); mainWindow.maximize() const { session } = mainWindow.webContents; const { cookies } = session; // 等待cookie初始化完成 function waitCookieInit() { return new Promise(function (resolve) { setTimeout(resolve, 3000); }); }; // 替换cookie function cookieReplace(cookies, cookie) { return cookies.remove(cookie.url, cookie.name).then(() => { return cookies.set(cookie); }) }; // 批量设置目标值 const cookieValue = [] // 多个cookie的情况下 遍历去设置参数 // 默认格式{cookie的key值: cookie的value} const keyList = Object.keys(cookieData); keyList.forEach(key => { cookieValue.push( { url: 'xxx.com', // 目标第三方网址 name: key, // 第三方网址cookie的key值 value: cookieData[key], // cookie的value值 domain: '.xxx.com', // domain要设置的值 expirationDate: 99999999999 // 过期时间 } ) }) // 批量替换 waitCookieInit().then(() => { const promises = cookieValue.map(cookie => cookieReplace(cookies, cookie)); return Promise.all(promises).then(() => { // 设置成功 mainWindow.loadURL('xxxx.com'); // 加载指定第三方网址 // mainWindow.webContents.openDevTools(); }).catch(() => { // 设置失败 }).finally(() => { }) }); }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。