<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        electron實現qq快捷登錄的方法示例

        來源:懂視網 責編:小采 時間:2020-11-27 22:05:53
        文檔

        electron實現qq快捷登錄的方法示例

        electron實現qq快捷登錄的方法示例:之前本來想不寫這個功能的,結果客戶死活要qq登錄! 實在沒辦法就寫了,順便寫個文章! 在寫之前有兩個問題: 1: 打開qq授權頁面點擊頁面中的鏈接會又打開一個頁面! ..... 2: 授權之后是否成功很難去判斷 不過腦海中有一個想法就是,electron就是一個類
        推薦度:
        導讀electron實現qq快捷登錄的方法示例:之前本來想不寫這個功能的,結果客戶死活要qq登錄! 實在沒辦法就寫了,順便寫個文章! 在寫之前有兩個問題: 1: 打開qq授權頁面點擊頁面中的鏈接會又打開一個頁面! ..... 2: 授權之后是否成功很難去判斷 不過腦海中有一個想法就是,electron就是一個類

        之前本來想不寫這個功能的,結果客戶死活要qq登錄! 實在沒辦法就寫了,順便寫個文章!

        在寫之前有兩個問題:

        1: 打開qq授權頁面點擊頁面中的鏈接會又打開一個頁面! .....
        2: 授權之后是否成功很難去判斷

        不過腦海中有一個想法就是,electron就是一個類似于瀏覽器一樣,既然是瀏覽器那肯定可以阻止鏈接的點擊 也可以判斷狀態!
        就去啃文檔了!!!

        推薦大家去w3c去看文檔 比較全 而且速度較快 文檔也比較新:https://www.w3cschool.cn/electronmanual/

        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事件解釋:

        當用戶或 page 想要開始導航的時候發出事件.它可在當 window.location 對象改變或用戶點擊 page 中的鏈接的時候發生.

        當使用 api(如 webContents.loadURL 和 webContents.back) 以編程方式來啟動導航的時候,這個事件將不會發出.

        它也不會在頁內跳轉發生, 例如點擊錨鏈接或更新 window.location.hash.使用 did-navigate-in-page 事件可以達到目的

        did-get-response-details 事件解釋:

        當有關請求資源的詳細信息可用的時候發出事件. status 標識了 socket鏈接來下載資源.

        拿到這兩個之后我們就可以寫代碼啦!

        在點擊授權之后授權頁面會跳轉到我們服務器的一個回調地址 在里面做一個操作 比如獲取用戶token亂七八糟的! 之后將生成的token返回給客戶端!

        但是要注意這里服務端返回的數據客戶端不能解析 大家可以使用:findInPage 去查詢返回的內容!

        但是我沒去這么做

        因為 did-get-response-details 事件返回了:

        status,newURL,originalURL,httpResponseCode,requestMethod,referrer,headers 八個參數
        最后我們只需要判斷httpResponseCode 是200的時候 將header里面的參數從主進程返回給渲染進程
        大概的數據是這樣的:

        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] 這種寫法有點不喜歡 但是沒法子!

        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        electron實現qq快捷登錄的方法示例

        electron實現qq快捷登錄的方法示例:之前本來想不寫這個功能的,結果客戶死活要qq登錄! 實在沒辦法就寫了,順便寫個文章! 在寫之前有兩個問題: 1: 打開qq授權頁面點擊頁面中的鏈接會又打開一個頁面! ..... 2: 授權之后是否成功很難去判斷 不過腦海中有一個想法就是,electron就是一個類
        推薦度:
        標簽: QQ 辦法 qq登錄
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 97精品免费视频| 久久永久免费人妻精品| 女人被弄到高潮的免费视频| 亚洲国产精品综合福利专区| 67194成手机免费观看| 亚洲精品在线视频观看| 1000部禁片黄的免费看| 亚洲AV无码国产精品色| 成人毛片免费观看视频大全| 2020国产精品亚洲综合网| 67194熟妇在线永久免费观看 | 伊人久久大香线蕉亚洲五月天| 一区二区三区精品高清视频免费在线播放 | 日本视频一区在线观看免费| 亚洲国产超清无码专区| 毛片a级三毛片免费播放| 国产综合激情在线亚洲第一页| 国产一级一片免费播放i| 一区二区三区免费在线视频| 国产av天堂亚洲国产av天堂| 久久免费动漫品精老司机 | 亚洲毛片在线观看| 国拍在线精品视频免费观看| 亚洲精品天堂成人片AV在线播放| 成人亚洲综合天堂| 国产麻豆成人传媒免费观看| 亚洲成a人片在线网站| 日韩免费毛片视频| 黄色免费在线网站| 亚洲va成无码人在线观看| 免费一级成人毛片| 午夜爽爽爽男女免费观看影院| 亚洲妇女熟BBW| 亚洲人成网亚洲欧洲无码久久 | 99精品在线免费观看| 亚洲国产AV无码一区二区三区| 亚洲一级片免费看| 色播精品免费小视频| 曰批免费视频播放免费| 亚洲精品不卡视频| 免费夜色污私人影院在线观看|