摘要:在實際項目之中,經常會遇到之中嵌入網頁的情況,就需要網頁與原生之間交互,比如獲取當前用戶信息等。一種簡單的方式就是通過參數來搞定,但是這種方式異常死板,所以有了。本文章旨在記錄的實現,如有錯誤,還請指正如有需要了解原理,請。
在實際項目之中,經常會遇到app之中嵌入網頁的情況(Hybrid),就需要web網頁與原生app之間交互,比如獲取當前用戶信息等。一種簡單的方式就是通過url參數來搞定,但是這種方式異常死板,所以有了jsbridge。
本文章旨在記錄WebViewJavascriptBridge的實現,如有錯誤,還請指正!如有需要了解jsbridge原理,請google。
需求:
/** * 函數描述:js調用webview事件 * * jsBridge.callHandler(method, data, callBack(response)); * @param method {string} 方法名 * @param data {Object} 參數 * @return {Object} 回調 */ /** * 函數描述:webView調用JS事件 * * jsBridge.registerHandler(method, callBack(response)); * @param method {string} 方法名 * @return {Object} 回調 */
const JsBridge = { init: function (callback) { const u = navigator.userAgent; const isiOS = !!u.match(/(i[^;]+;( U;)? CPU.+Mac OS X/); //判斷手機系統 if (!isiOS) { //ios if (window.WebViewJavascriptBridge) { callback(WebViewJavascriptBridge) } else { // 注冊事件,WebViewJavascriptBridge加載完成時調用 document.addEventListener( "WebViewJavascriptBridgeReady", function () { callback(WebViewJavascriptBridge) }, false ); } } else { //Android // 如果有WebViewJavascriptBridge,則直接返回callback if (window.WebViewJavascriptBridge) { return callback(WebViewJavascriptBridge); } // 如果有WVJBCallbacks,則向WVJBCallbacks中注入事件 if (window.WVJBCallbacks) { return window.WVJBCallbacks.push(callback); } // 否則創建WVJBCallbacks window.WVJBCallbacks = [callback]; const WVJBIframe = document.createElement("iframe"); WVJBIframe.style.display = "none"; WVJBIframe.src = "wvjbscheme://__BRIDGE_LOADED__"; document.documentElement.appendChild(WVJBIframe); setTimeout(function () { document.documentElement.removeChild(WVJBIframe) }, 0) } }, first: function () { const u = navigator.userAgent; const isiOS = !!u.match(/(i[^;]+;( U;)? CPU.+Mac OS X/); if (!isiOS) { const _this = this; _this.init(function (bridge) { bridge.init(function (message, responseCallback) { responseCallback(data); }) }) } }, registerHandler: function (name, fun) { const _this = this; _this.init(function (bridge) { bridge.registerHandler(name, fun); }) }, callHandler: function (name, data, fun) { const _this = this; _this.init(function (bridge) { bridge.callHandler(name, data, fun); }) } } // 初始化 JsBridge.first();
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/108827.html
摘要:在實際項目之中,經常會遇到之中嵌入網頁的情況,就需要網頁與原生之間交互,比如獲取當前用戶信息等。一種簡單的方式就是通過參數來搞定,但是這種方式異常死板,所以有了。本文章旨在記錄的實現,如有錯誤,還請指正如有需要了解原理,請。 在實際項目之中,經常會遇到app之中嵌入網頁的情況(Hybrid),就需要web網頁與原生app之間交互,比如獲取當前用戶信息等。一種簡單的方式就是通過url參數...
摘要:否則按照正常流程處理。如果是表示是初始化環境的消息,如果是則表示是發送消息。則立即發送消息。回調主動調用獲取注冊的函數調用中的對應函數處理把消息從發送到,執行具體的發送操作。處理從返回的消息。從而找到具體的實現執行。 基本說明 我們的項目是一個OC與javascript重度交互的app,OC與javascript交互的那部分是在WebViewJavascriptBridge的githu...
摘要:否則按照正常流程處理。如果是表示是初始化環境的消息,如果是則表示是發送消息。則立即發送消息。回調主動調用獲取注冊的函數調用中的對應函數處理把消息從發送到,執行具體的發送操作。處理從返回的消息。從而找到具體的實現執行。 基本說明 我們的項目是一個OC與javascript重度交互的app,OC與javascript交互的那部分是在WebViewJavascriptBridge的githu...
摘要:否則按照正常流程處理。如果是表示是初始化環境的消息,如果是則表示是發送消息。則立即發送消息。回調主動調用獲取注冊的函數調用中的對應函數處理把消息從發送到,執行具體的發送操作。處理從返回的消息。從而找到具體的實現執行。 基本說明 我們的項目是一個OC與javascript重度交互的app,OC與javascript交互的那部分是在WebViewJavascriptBridge的githu...
閱讀 995·2023-04-25 19:35
閱讀 2633·2021-11-22 09:34
閱讀 3679·2021-10-09 09:44
閱讀 1713·2021-09-22 15:25
閱讀 2932·2019-08-29 14:00
閱讀 3372·2019-08-29 11:01
閱讀 2596·2019-08-26 13:26
閱讀 1735·2019-08-23 18:08