最近做的項目中涉及到了與安卓和ios的交互問題,對於一個新手來說,多多少少會有點迷糊。在調用安卓和ios的callback回調時,很輕松的就調用成功了,而且,步驟也不那么繁瑣。剛開始,只知道那樣使用可以調用他們封裝好的方法,來執行得到想要的效果,但是其中的原理什么的沒有過多了了解。但是今天,需要用到前端封裝方法傳遞給ios和安卓,用於調用前端在js中封裝的方法。還是一如既往的按照原來的方法直接拋給人家,一個函數名,及告知他們需要傳遞的參數。就這樣,安卓端輕而易舉的調用到我封裝的方法,而且沒有任何問題,但是在IOS上就掛了,就是調用不到。回過頭來,仔細縷了一下自己代碼,沒有問題,最后才發現沒有使用固定的方法傳遞給ISO。
- 調用安卓的方法回調
1 window.android.fun()
其中 fun() 為與安卓開發人員協商好的方法名。
安卓調用前端封裝的js函數的方法: 直接將前端在js中封裝的函數名以及需要傳遞的參數告知安卓開發就OK了!
****** JS調用IOS之前需要做的准備工作:
function setupWebViewJavascriptBridge(callback) { if (window.WebViewJavascriptBridge) { return callback(WebViewJavascriptBridge); } if (window.WVJBCallbacks) { return window.WVJBCallbacks.push(callback); } window.WVJBCallbacks = [callback]; var WVJBIframe = document.createElement('iframe'); WVJBIframe.style.display = 'none'; WVJBIframe.src = 'wvjbscheme://__BRIDGE_LOADED__'; document.documentElement.appendChild(WVJBIframe); setTimeout(function () { document.documentElement.removeChild(WVJBIframe) }, 0) }
與IOS端進行交互時,復制粘貼該段代碼,到你的JS中,全局都調用!
****** JS調用IOS傳遞的方法:
setupWebViewJavascriptBridge(function (bridge) {
bridge.callHandler('ZZZZZZZZZZZZZZZZZ', {key:value}, function responseCallback(responseData) {
//。。。
});
});
/**
* ZZZZZZZZZZZ 為IOS端傳遞過來的函數名
* 其中第一個中括號中的鍵值對,為傳遞過來的參數
* 最后的函數為回調函數,以便於請求成功之后的函數的處理
*/
****** JS給ISO傳遞自己封裝的函數的方法:
setupWebViewJavascriptBridge(function (bridge) { bridge.registerHandler('XXXXXXX', function (data) { var obj = JSON.parse(data); ZZZZZZZ(obj.can1, obj.can2); });
});
// XXXXXXXX:為前端JS要傳遞給IOS的封裝的函數的名字
// function中的data參數為IOS端調用成功之后的回調,其中data為返回的結果。
// 若 XXXXXXX 函數中需要傳遞參數,則在data對象中獲取,(依據IOS端傳遞的方式進行相應的處理,我這邊是傳遞的JSON字符串類型,所以就對返回的結果:data做了數據轉換處理)
// ZZZZZZZZZ():為JS本地需要執行的函數,若需要參數的情況下,可以解析obj中獲取到的參數,進行賦值調用