2
0
Эх сурвалжийг харах

修复 uniapp 平台,bridge 可能错误问题

x86 1 жил өмнө
parent
commit
c19cbed9aa

+ 3 - 4
open-work/src/jssdk/biz.js

@@ -1,10 +1,9 @@
-import {_handleNativeCall} from "@/jssdk/util";
+import {_handleNativeCall, bridge} from "@/jssdk/util";
 
-const bridge =  window.__wf_bridge_ ? window.__wf_bridge_ : require('dsbridge');
 export default class Biz {
 
     getAuthCode(appId, type, successCB, failCB) {
-        bridge.call('getAuthCode', {
+        bridge().call('getAuthCode', {
                 appId,
                 appType: type,
             }, _handleNativeCall(successCB, failCB)
@@ -14,6 +13,6 @@ export default class Biz {
     chooseContacts(options, successCB, failCB) {
         options = options ? options : {};
         options.max = 3;
-        bridge.call('chooseContacts', options, _handleNativeCall(successCB, failCB));
+        bridge().call('chooseContacts', options, _handleNativeCall(successCB, failCB));
     }
 }

+ 14 - 9
open-work/src/jssdk/bridgeClientImpl.uni.js

@@ -9,9 +9,10 @@
 let callbackMap = new Map();
 let eventListeners = {};
 let requestId = 0;
-let client;
 
-function init() {
+let uniappBridgeReady = false;
+
+export function initUniappBridge() {
     window.__messageFromUni = (data) => {
         console.log('__messageFromUni', data)
         let obj;
@@ -36,6 +37,10 @@ function init() {
 }
 
 function call(handlerName, args, callback) {
+    if (!uniappBridgeReady){
+        console.error('uniapp bridge not ready!')
+        return;
+    }
     let reqId = 0;
     if (callback && typeof callback === 'function') {
         reqId = requestId++;
@@ -59,7 +64,6 @@ function handleOpResponse(requestId, args) {
 
 function handleOpEvent(handlerName, args) {
     eventListeners[handlerName] && eventListeners[handlerName](args);
-
 }
 
 function register(handlerName, callback) {
@@ -68,15 +72,16 @@ function register(handlerName, callback) {
 
 console.log('add UniAppJSBridgeReady listener')
 document.addEventListener('UniAppJSBridgeReady', () => {
+    uniappBridgeReady = true;
     console.log('receive UniAppJSBridgeReady event')
     uni.getEnv((res) => {
         console.log('当前环境:' + JSON.stringify(res));
         // web 端 h5: true
-        if (res.nvue){
-            console.log('init uni client')
-            init();
-        }else {
-            console.log('not init uni client')
-        }
+        // if (res.nvue){
+        //     console.log('init uni client')
+        //     init();
+        // }else {
+        //     console.log('not init uni client')
+        // }
     });
 });

+ 3 - 3
open-work/src/jssdk/navigation.js

@@ -1,10 +1,10 @@
-import {_handleNativeCall} from "@/jssdk/util";
+import {_handleNativeCall, bridge} from "@/jssdk/util";
 
-const bridge = window.__wf_bridge_ ? window.__wf_bridge_ : require('dsbridge');
 
 export default class Navigation {
     close(successCB, failCB) {
+
         // call 方法的声明:  call (handlerName: string, args?: any, responseCallback?: (retValue: any) => void): any;
-        bridge.call('close', {}, _handleNativeCall(successCB, failCB));
+        bridge().call('close', {}, _handleNativeCall(successCB, failCB));
     }
 }

+ 14 - 0
open-work/src/jssdk/util.js

@@ -1,3 +1,5 @@
+import {initUniappBridge} from "./bridgeClientImpl.uni";
+
 export function _handleNativeCall(successCB, failCB) {
     return (result) => {
         console.log('native callback result', result);
@@ -17,3 +19,15 @@ export function _handleNativeCall(successCB, failCB) {
         }
     }
 }
+
+export function bridge() {
+    if (navigator.userAgent.indexOf('uni-app') >= 0) {
+        if (!window.__wf_bridge_) {
+            initUniappBridge();
+        }
+        return window.__wf_bridge_;
+    } else {
+        return window.__wf_bridge_ ? window.__wf_bridge_ : require('dsbridge');
+    }
+}
+

+ 8 - 8
open-work/src/jssdk/wf.js

@@ -1,7 +1,7 @@
 import Biz from "./biz";
 import Navigation from "@/jssdk/navigation";
+import {bridge} from "./util";
 
-const bridge = window.__wf_bridge_ ? window.__wf_bridge_ : require('dsbridge');
 
 export class Wf {
     biz = new Biz();
@@ -9,28 +9,28 @@ export class Wf {
 
     openUrl(url, options) {
         if (window.__wf_bridge_) {
-            // pc
-            bridge.call('openUrl', {url, ...options});
+            // pc or uniapp
+            bridge().call('openUrl', {url, ...options});
         } else {
             // mobile
-            bridge.call('openUrl', url);
+            bridge().call('openUrl', url);
         }
     }
 
     ready(callback) {
-        bridge.register('ready', () => {
+        bridge().register('ready', () => {
             callback && callback();
         })
     }
 
     error(callback) {
-        bridge.register('error', (reason) => {
+        bridge().register('error', (reason) => {
             callback && callback(reason);
         })
     }
 
     config(obj) {
-        bridge.call('config', obj)
+        bridge().call('config', obj)
     }
 
     /**
@@ -38,7 +38,7 @@ export class Wf {
      * @param text
      */
     toast(text) {
-        bridge.call('toast', text)
+        bridge().call('toast', text)
     }
 }