此处以假设目标网站是百度(www.baidu.com),我们的目标是将用户登陆记录保存在本地,以便下次重启时在百度登陆界面时自动填充用户名。
假设目标信息在cookies结构如下:
{
name: 'username',
value: 'csdnrole',
domain: 'www.baidu.com',
hostOnly: true,
path: '/baiduacc',
secure: false,
httpOnly: false,
session: true,
sameSite: 'unspecified'
},
假设读取操作在main.js中执行,程序启动读取本地文件,程序结束前检测当前cookies变化写入文件,那么首先在electron的main.js创建生命周期前,声明require、全局变量和预先在本地创建的文件路径
const fs =require('fs')
const {session} = require('electron')
uname=''
cname=''
defaultpath=—__dirname+'\\config.cfg'
如果生成窗口自动执行的是function createWindow(),则在此函数中编写如下代码
function createWindow () {
// Create the browser window.
const mainWindow = new BrowserWindow({
width: 1280,
height: 720,
webPreferences: {
preload: path.join(__dirname, 'preload.js')
}
})
// 从defaultpath读取文件内容,通过strd传递给uname
fs.readFile(defaultpath,"utf-8",function(err,strd){
if(err){
console.log(err)
}else{
uname=strd
console.log('current username value: '+uname)
// 得到uname,设定cookies的值
session.defaultSession.cookies.set({ url: 'http://www.baidu.com', name:'username', value:uname})
.then((cookies) => {
console.log(cookies)
}).catch((error) => {
console.log(error)
})
}
})
// 加载目标网址,读取cookies值并写入至程序cookies必须在加载目标页面之前
mainWindow.loadURL=('http://www.baidu.com')
}
在生命周期窗口关闭时,检测cookies有无变化,无变化或者为空时回滚写入最后一次的值,有变化则更新新值
app.on('window-all-closed', function () {
//过滤cookies内容
session.defaultSession.cookies.get({ url: 'http://www.baidu.com' , name:'username'})
.then((cookies) => {
var a=cookies[0].name.toString()
var b=cookies[0].value.toString()
console.log('name: '+a+'value: '+b)
//检测cookies的值有无变化
if(b=='' || b==uname){
//cookies获取到的值为空或未发生变化,不执行任何操作
}else{
//cookies值发生变化,重置文件内容,写入新值
cname=b
console.log('cookies update to: '+cname)
//创建一个文件索引号,以提供给fs.ftruncate()函数
fd=fs.openSync(defaultpath,'r+')
//清空文件全部内容
fs.ftruncate(fd,0,(err)=>{
if(err){
console.log(err)
}
})
//关闭文件,保存
fs.close(fd,(err)=>{
if(err){
console.log(err)
}else{
console.log('ftruncate ok,close.')
}
})
console.log('update name:'+cname)
//同步文件写入到defaultpath
fs.writeFileSync(defaultpath,cname)
//同步读取文件内容到rdata,控制台输出rdata
rdata=fs.readFileSync(defaultpath)
console.log('now cookies name: '+rdata)
}
}).catch((error) => {
console.log(error)
})
if (process.platform !== 'darwin') app.quit()
})
版权声明:本文为FreeEagle_Kaze原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。