瀏覽代碼

Merge branch 'pre' of DeNet/de-net-hotload into master

jihuaqiang 2 年之前
父節點
當前提交
12f33e7205

+ 7 - 5
src/http/request.js

@@ -1,7 +1,7 @@
 import axios from 'axios'
 import { getChromeStorageFromExtension } from '@/uilts/chromeExtension.js'
 import { baseAPIUrl, appVersionCode } from '@/http/configAPI.js'
-
+import { getQueryString } from '@/uilts/help.js';
 let userInfo = '';
 let storage_mid = ''
 
@@ -18,6 +18,7 @@ export const service = axios.create({
 function checkParams(config) {
   const { accessToken: token = '', uid = '' } = userInfo || {};
   const { mid } = storage_mid || {};
+  const denetVersionCode = +getQueryString('appVersionCode') || appVersionCode;
 
   if (config.method === 'get') {
     let { baseInfo = null } = config.params || {};
@@ -30,11 +31,12 @@ function checkParams(config) {
       delete params.params.pageSource;
     }
 
+
     if (!baseInfo || !baseInfo.token) {
       params['baseInfo'] = {
         token: token,
         mid,
-        appVersionCode,
+        appVersionCode: denetVersionCode,
         loginUid: uid,
         uid,
         appType: 1,
@@ -59,7 +61,7 @@ function checkParams(config) {
       data['baseInfo'] = {
         token: token,
         mid,
-        appVersionCode,
+        appVersionCode: denetVersionCode,
         loginUid: uid,
         uid,
         appType: 1,
@@ -74,9 +76,9 @@ function checkParams(config) {
 
 // request拦截器
 service.interceptors.request.use(async (config) => {
-  userInfo = await getChromeStorageFromExtension('userInfo') || ''
+  userInfo = await getChromeStorageFromExtension('userInfo').catch((e) => { console.log(e)}) || ''
   if (!storage_mid) {
-    storage_mid = await getChromeStorageFromExtension('mid') || ''
+    storage_mid = await getChromeStorageFromExtension('mid').catch((e) => { console.log(e)}) || ''
   }
   return checkParams(config)
 }, error => {

+ 2 - 1
src/pages/tab-group.vue

@@ -206,6 +206,7 @@ const getListData = () => {
 }
 
 const initData = () => {
+    loading.value = true;
     let { windowLocation } = JSON.parse(getQueryString('params'));
     if (windowLocation.pathname) {
         let arr = windowLocation.pathname.split('/');
@@ -220,7 +221,7 @@ const initData = () => {
                     if (res.code == 0) {
                         groupInfo = res.data || {};
                         if (!groupInfo.nftGroupId) return;
-                        loading.value = true;
+                        // loading.value = true;
                         getListData()
                     }
                 })

+ 37 - 3
src/uilts/chromeExtension.js

@@ -1,5 +1,7 @@
 import { pageUrl } from "@/http/configAPI.js"
-import { guid } from "@/uilts/help";
+import { guid, iframeID } from "@/uilts/help";
+import messageCenter from '@/uilts/messageCenter';
+import MESSAGE_ENUM from "@/uilts/messageCenter/messageEnum";
 
 export const LANDING_PAGE = {
     name: 'received_log',
@@ -28,10 +30,42 @@ export function setChromeStorage(params, callback) {
     }
 }
 
-export function getChromeStorageFromExtension(key = '') {
+export function getSessionStorge(key) {
+    const value = sessionStorage.getItem(key);
+    return value && JSON.parse(value);
+}
+
+export function setSessionStorge(key, value) {
+    return sessionStorage.setItem(key, JSON.stringify(value));
+}
+
+export async function getChromeStorageFromExtension(key = '') {
     let params = {}
     params[key] = ''
-
+    const value = getSessionStorge(key);
+    if (value) {
+        return Promise.resolve(value);
+    } else { 
+        return new Promise((res, rej) => {
+            messageCenter.send({
+                actionType: MESSAGE_ENUM.IFRAME_GET_EXTENSION_STORGE_DATA,
+                data: {
+                    iframeID,//用于告诉父窗口会传消息给哪个iframe
+                    key,// storage key
+                    messageID: guid(), // 唯一的ID,用于标记回调函数
+                    overTime: 50
+                },
+                callback: (data) => {
+                    setSessionStorge(key, data);
+                    res(data);
+                },
+                failback: (e) => {
+                    setSessionStorge(key, {});
+                    rej(e)
+                }
+            })
+        })
+    }
     // console.log(window.parent.window.atest)
     // window.postMessage({actionType: 'iframe_test', data: key})
 }

+ 3 - 1
src/uilts/help.js

@@ -257,4 +257,6 @@ export function $(key, cache = true) {
     }
   }
   return _dom
-}
+}
+
+export const iframeID = getQueryString('iframeID');

+ 44 - 2
src/uilts/messageCenter/index.js

@@ -3,14 +3,22 @@ class MessageCenter {
     constructor() { 
         //  缓存事件队列
         this.messageCallbackMap = new Map();
+        this.messageFailbackMap = new Map();
         this.init()
     }
 
-    send({ actionType, data }) {
+    send({ actionType, data, callback, overTime, failback }) {
         window.parent.postMessage({
             actionType,
             data
         }, '*');
+        if (data.messageID && callback) {
+            // 带回调callback 的message, 要求携带messageID,callback,failback等
+            this.listen(`${actionType}-${data.messageID}`, callback)
+            if (failback) { 
+                this.addFailback(`${actionType}-${data.messageID}`, overTime, failback)
+            }
+        }
     }
 
     listen(actionType, callback) {
@@ -22,9 +30,25 @@ class MessageCenter {
         }
     }
 
-    init() { 
+    addFailback(actionType, overTime=2000, failback) { 
+        let failbackQuene = this.messageFailbackMap.get(actionType);
+        if (failbackQuene && failbackQuene.failCallbackList) {
+            failbackQuene.failCallbackList.push(
+                failback
+                )
+            } else { 
+                this.messageFailbackMap.set(actionType, {
+                    time: new Date().getTime(),
+                    overTime,
+                    failCallbackList: [failback]
+                })
+            }
+    }
+
+    init() {
         window.addEventListener('message', (e) => { 
             const { actionType, data } = e.data;
+            this.messageFailbackMap.delete(actionType);
             const quene = this.messageCallbackMap.get(actionType) ||  [];
             let index = 0;
             while (index < quene.length) { 
@@ -33,6 +57,24 @@ class MessageCenter {
                 index++
             }
         })
+        setInterval(() => { 
+            // 轮询查看有无超期的message信息
+            const now = new Date().getTime();
+            for (let item of this.messageFailbackMap.values()) { 
+                if (now - item.time > item.overTime) { 
+                    let index = 0;
+                    while (index < item.failCallbackList.length) { 
+                        const callback = item.failCallbackList[index];
+                        callback({
+                            error: 0,
+                            msg: "message 超时错误"
+                        })
+                        index++
+                    }
+                }
+            }
+
+        }, 1000)
     }
 }
 

+ 3 - 1
src/uilts/messageCenter/messageEnum.js

@@ -3,7 +3,9 @@ const SEND_MESSAGE_ENUM =  {
     IFREME_TAB_GROUP_SET_IFRAME_HEIGHT: 'IFREME_TAB_GROUP_SET_IFRAME_HEIGHT',
     /** group tab 内的列表项点击 */
     IFRAME_PAGE_JUMP: 'IFRAME_PAGE_JUMP',
-    IFREME_TAB_GROUP_CONTENT_GET_NAV_TOP: 'IFREME_TAB_GROUP_CONTENT_GET_NAV_TOP'
+    IFREME_TAB_GROUP_CONTENT_GET_NAV_TOP: 'IFREME_TAB_GROUP_CONTENT_GET_NAV_TOP',
+    /** 获取content的localstorge数据 */
+    IFRAME_GET_EXTENSION_STORGE_DATA: 'IFRAME_GET_EXTENSION_STORGE_DATA'
 }
 
 /** 接收父窗口的事件定义 */