|
导读网页的本质就是超级文本标记语言,通过结合使用其他的Web技术(如:脚本语言、公共网关接口、组件等),可以创造出功能强大的网页。因而,超级文本标记语言是万维网(Web)编程的基础,也就是说万维网是建立... 网页的本质就是超级文本标记语言,通过结合使用其他的Web技术(如:脚本语言、公共网关接口、组件等),可以创造出功能强大的网页。因而,超级文本标记语言是万维网(Web)编程的基础,也就是说万维网是建立在超文本基础之上的。超级文本标记语言之所以称为超文本标记语言,是因为文本中包含了所谓“超级链接”点。 本篇文章给大家带来的内容是关于electron如何实现qq的快捷登录?有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。之前本来想不写这个功能的,结果客户死活要qq登录! 实在没办法就写了,顺便写个文章! 不过脑海中有一个想法就是,electron就是一个类似于浏览器一样,既然是浏览器那肯定可以阻止链接的点击 也可以判断状态! 推荐大家去w3c去看文档 比较全 而且速度较快 文档也比较新 https://electronjs.org/docs 这里面的响应速度比较慢 里面很多文档都很久了 参数也有失效的!!! 言归正传 说qq登录! 后端是使用PHP实现的 没什么难度,主要的就是客户端的一些处理. 放置qq登录按钮 <template>
<div>
<button @click="qqLogin">qq登录</button>
</div>
</template>
<script>
export default {
name: "home",
mounted() {
this.$electron.ipcRenderer.on('reply', (e, data) => {
console.log(data)
let httpCode = data.request_code[0];
if (httpCode === '1') {
alert(data.token[0])
}
})
},
methods: {
qqLogin() {
//请求服务器获取授权页面和参数
this.$http.get('xxxxx')
.then((result) => {
if (result.data.status === 1) {
this.$electron.ipcRenderer.send('qqLogin', {url: result.data.data});
}
})
.catch()
},
}
}
</script>问题解决 点击a链接会打开一个新窗口 解决打开qq授权页面点击页面中的链接会又打开一个窗口的问题 使用webContents 的 new-window 事件 组织默认事件 调用Shell利用默认浏览器打开就行了! loginWindow.webContents.on('new-window', (event, url) => {
event.preventDefault();
shell.openExternal(url);
});授权后是否成功很难去判断 到这个问题后我就想到一个词 那就是 Response 和 code 然后就去搜索了嘛 结果在 webContents找到了! did-get-redirect-request 事件 ! loginWindow.webContents.on('will-navigate', (e, url,) => {
content.on('did-get-response-details', (e, status, url, originalURL, httpResponseCode, requestMethod, referrer, header) => {
if (httpResponseCode === 200) {
event.sender.send('reply', header);
// loginWindow.close();
}
})
});will-navigate事件解释: did-get-response-details 事件解释: 拿到这两个之后我们就可以写代码啦! 但是要注意这里服务端返回的数据客户端不能解析 大家可以使用:findInPage 去查询返回的内容! 因为 did-get-response-details 事件返回了: access-control-allow-credentials:["true"] access-control-allow-headers:["token,Origin, X-Requested-With, Content-Type, Accept"] access-control-allow-methods:["POST,GET,DELETE,PUT"] cache-control:["no-store, no-cache, must-revalidate"] connection:["Keep-Alive"] content-type:["application/json; charset=utf-8"] date:["Sun, 21 Oct 2018 14:02:20 GMT"] expires:["Thu, 19 Nov 1981 08:52:00 GMT"] keep-alive:["timeout=5, max=100"] request_code:["1"] msg:["登录成功"] token:["xxxxxxxx"] pragma:["no-cache"] server:["Apache/2.4.23 (Win32) OpenSSL/1.0.2j mod_fcgid/2.3.9"] set-cookie:["PHPSESSID=6b0esq5jd8vloess2c96ove86s; path=/; HttpOnly"] transfer-encoding:["chunked"] x-powered-by:["PHP/7.2.1"] 以上参数中 msg request_code token为自定义参数 是服务器代码生成的! 能得到这些就好办了! 渲染进程拿到header中的token根据 token获取用户信息这之后就简单的很了!!! 主进程代码: import {ipcMain, BrowserWindow, shell} from 'electron'
ipcMain.on('qqLogin', (event, data) => {
const loginWindow = new BrowserWindow({
width: 750,
height: 450,
resizable: false,
minimizable: false,
maximizable: false,
webPreferences: {
devTools: false,
}
});
loginWindow.setMenu(null);
loginWindow.loadURL(data.url);
loginWindow.webContents.on('new-window', (event, url) => {
event.preventDefault();
shell.openExternal(url);
});
const content = loginWindow.webContents;
content.on('will-navigate', (e, status, url,) => {
content.on('did-get-response-details', (e, status, url, originalURL, httpResponseCode, requestMethod, referrer, header) => {
if (httpResponseCode === 200) {
event.sender.send('reply', header);
loginWindow.close();
}
})
});
});注意点 返回的header里面是一个数组 这种写法真是坑爹啊! 还要去写一个 header.token[0] 这种写法有点不喜欢 但是没法 以上就是electron如何实现qq的快捷登录?的详细内容,更多请关注php中文网其它相关文章! 网站建设是一个广义的术语,涵盖了许多不同的技能和学科中所使用的生产和维护的网站。 |
温馨提示:喜欢本站的话,请收藏一下本站!