wxWindow.webContents.on('will-navigate', (e) => { const webContents = wxWindow.webContents // // 过滤url地址,只监听需要的url const filter = {urls: ['*://www.xuexiluxian.cn/oauth/*']} webContents.session.webRequest.onBeforeSendHeaders(filter, (details, callback) => { details.url = details.url.replace("www.xuexiluxian.cn", "www.xuexiluxian.cn:9999") details.requestHeaders['WechatOauthType'] = 'login' if ( token ) { details.requestHeaders['WechatOauthType'] = 'bind' details.requestHeaders['Authorization'] = token } callback({requestHeaders: details.requestHeaders}) }) //请求完成 webContents.session.webRequest.onCompleted(filter, (details) => { const params = new URLSearchParams(new URL(details.url).search) const code = params.get("code") // 1. 通知渲染进程 // a.绑定:调接口 if ( token ) { api.window.webContents.send('main-to-renderer', { name: 'wechat-bind', event: 'event', data: code }) } else { // b.登录:调接口 ==> 主进程给渲染进程通信 api.window.webContents.send('main-to-renderer', { name: 'wechat-login', event: 'event', data: code }) } // 2. 关闭当前窗体 wxWindow.close() // 3. 销毁当前窗体 wxWindow.destroy() }) })
时间: 2024-02-14 21:32:12 浏览: 101
这段代码是在wxWindow的webContents上注册了两个事件监听器,用于处理将要导航和请求完成的情况。
1. 首先,在wxWindow的webContents上监听了"will-navigate"事件,该事件在页面即将导航到新URL时触发。
2. 在"will-navigate"事件的回调函数中,创建了一个URL过滤器对象filter,用于指定需要监听的URL地址,这里只监听形如"https://www.xuexiluxian.cn/oauth/*"的URL。
3. 接着,通过webContents.session.webRequest.onBeforeSendHeaders方法,在发送网络请求前注册了一个回调函数。该回调函数会在每次请求发送前被调用。
4. 在回调函数中,首先通过details.url.replace()方法将URL中的"www.xuexiluxian.cn"替换为"www.xuexiluxian.cn:9999",从而修改了请求的目标地址。
5. 然后,根据条件判断是否存在token变量。如果存在,说明已经登录成功,将"WechatOauthType"字段设置为"bind",并添加了"Authorization"字段并赋值为token,用于身份验证。
6. 在请求完成后,通过webContents.session.webRequest.onCompleted方法注册了一个回调函数。该回调函数会在每次请求完成后被调用。
7. 在回调函数中,首先从URL中获取code参数的值。
8. 根据条件判断是否存在token变量。如果存在,表示已经登录成功,通过api.window.webContents.send方法向渲染进程发送消息,通知进行绑定操作,同时将code作为数据传递给渲染进程。
9. 如果不存在token变量,表示需要进行登录操作,同样通过api.window.webContents.send方法向渲染进程发送消息,通知进行登录操作,并将code作为数据传递给渲染进程。
10. 最后,关闭当前窗口和销毁当前窗口。
总而言之,这段代码的作用是在wxWindow的webContents上监听页面导航和请求完成事件,根据条件进行URL的修改和请求头的设置,并向渲染进程发送消息通知执行相应的操作,最后关闭和销毁窗口。
阅读全文