electron获取webview、主窗口,以及子窗口Cookies( 二)

在electron中需要获取Cookies信息,对于这一块内容网上极少,Cookies获取和设置也没有详细的资料,对于想学习electron又没有教程以及资料的情况下研究是非常痛苦的,所以将学到的整理出来,填补这一块空白。

获取Cookies的同时先了解一下session做什么用的,Session可以管理浏览器会话cookie缓存代理设置等。知道了这个就可以获取Cookies了

可以使用WebContentssession属性或 session模块访问现有页的session

一、获取主窗口Cookies

方式一:用WebContents获取主窗口Cookies

	
const { BrowserWindow } = require('electron')
const win = new BrowserWindow({ width: 800, height: 600 })
win.loadURL('http://github.com')
const ses = win.webContents.session.cookies //获取到主窗口的Cookies
//获取Cookies
ses.cookies.get({ url: 'https://www.electronjs.org/' })
  .then((cookies) => {
    console.log(cookies)
  }).catch((error) => {
    console.log(error)
  })
//设置Cookies
ses.cookies.set({ url: 'https://www.electronjs.org/',name:"dummy_name",value:"dummy" })
  .then((cookies) => {
    console.log(cookies)
  }).catch((error) => {
    console.log(error)
  })

方式二:用session模块获取现有页面的Cookies

const { session } = require('electron')
//获取页面Cookies
session.defaultSession.cookies.get({ url: 'https://www.electronjs.org/' })
  .then((cookies) => {
    console.log(cookies)
  }).catch((error) => {
    console.log(error)
  })
//设置页面Cookies
const cookie = { url: 'https://www.electronjs.org', name: 'dummy_name', value: 'dummy' }
session.defaultSession.cookies.set(cookie)
  .then(() => {
    // success
  }, (error) => {
    console.error(error)
  })
//删除Cookies
const cookie = { url: 'https://www.electronjs.org', name: 'dummy_name'}
session.defaultSession.cookies.remove(cookie.url,cookie.name)
  .then(() => {
    // success
  }, (error) => {
    console.error(error)
  })

二、获取子窗口的Cookies

const { BrowserWindow } = require('electron')
const win = new BrowserWindow({ width: 800, height: 600 })
win.loadURL('http://github.com')
const view = new BrowserView()
win.setBrowserView(view)
view.setBounds({ x: 0, y: 0, width: 300, height: 300 })
view.webContents.loadURL('https://electronjs.org')
const ses = view.webContents.session.cookies //获取到主窗口的Cookies
//使用方式如上一样

三、获取webview 的Cookies

//渲染端开启webview
<webview src="https://www.github.com/" httpreferrer="http://cheng.guru" useragent="Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; AS; rv:11.0) like Gecko" partition="electron"></webview>
const { session } = require('electron')
const ses = session.fromPartition("electron")
ses.cookies.get({url:'https://github.com'}).then(function(cookies,error){
      console.log(cookies);
  });

### Electron 主窗口创建窗口方法 在 Electron 应用程序中,可以通过 `BrowserWindow` 模块来管理窗口。要从主窗口创建窗口,通常是在主进程中处理这一逻辑。 #### 使用 `main.js` 创建窗口 当需要从主窗口打开一个新的窗口时,在主进程文件(通常是 `main.js` 或类似的入口文件)里定义相应的事件监听器并响应这些事件: ```javascript const { app, BrowserWindow, ipcMain } = require('electron'); let mainWindow; let childWindow; app.whenReady().then(() => { mainWindow = new BrowserWindow({ width: 800, height: 600, webPreferences: { nodeIntegration: true, contextIsolation: false, } }); mainWindow.loadURL(`file://${__dirname}/index.html`); // 监听来自渲染进程的消息以决定何时创建新的窗口 ipcMain.on('create-child-window', () => { createChildWindow(); }); }); function createChildWindow() { childWindow = new BrowserWindow({ parent: mainWindow, modal: false, show: false, width: 400, height: 300, webPreferences: { preload: path.join(__dirname, 'preload.js'), nodeIntegration: true, contextIsolation: false, }, }); childWindow.once('ready-to-show', () => { childWindow.show(); }); childWindow.loadFile('child.html'); } ``` 这段代码展示了如何设置一个主窗口以及如何通过 IPC (Inter-Process Communication) 接收消息触发窗口的创建[^1]。 #### 渲染进程发起请求 如果希望由前端页面中的按钮点击或其他交互行为触发窗口的创建,则可以在对应的 HTML 文件内编写如下 JavaScript 来发送信号给主进程: ```html <button id="open-child">Open Child Window</button> <script type="text/javascript"> document.getElementById('open-child').addEventListener('click', function(event){ const {ipcRenderer} = require('electron'); ipcRenderer.send('create-child-window'); }); </script> ``` 此部分脚本负责捕获用户的输入动作并向主进程发出指令去实际执行创建新窗口的操作[^3]。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值