//js與webview交互初始化
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 = 'https://__bridge_loaded__';
document.documentElement.appendChild(WVJBIframe);
setTimeout(function () {
document.documentElement.removeChild(WVJBIframe)
}, 0)
}
//關(guān)注按鈕點擊交互
setupWebViewJavascriptBridge(function (bridge) {
function followChange(data) {
if (data == 1) {
$(".btnFollow").removeClass("btnFollow-yes").addClass("btnFollow-no");
} else {
$(".btnFollow").removeClass("btnFollow-no").addClass("btnFollow-yes");
}
}
$(".btnFollow").click(function () {
var followStaus=1;
if ($(this).is('.btnFollow-no')) {
followStaus=1;
} else {
followStaus=2;
}
bridge.callHandler(
'callMobileHandler',
{"followStaus": followStaus, "deviceType": "ios"},
function (response) {
if(response.followStaus==1){
$(this).removeClass("btnFollow-yes").addClass("btnFollow-no");
}else{
$(this).removeClass("btnFollow-no").addClass("btnFollow-yes");
}
});
});
bridge.registerHandler('callJSHandler', function (data, responseCallback) {
followChange(data.followStaus);
// responseCallback(responseData);
});
//以上代碼實現(xiàn)的功能可以正常運行,以下代碼實現(xiàn)的功能沒有生效
var imgs = document.getElementsByTagName("img");
//傳遞圖片src數(shù)組
var imgsSrc=imgs.map(function (value,index) {
return value.src
});
bridge.callHandler(
'callMobileHandler',//名稱待換
{"imgList": imgsSrc, "deviceType": "ios"},//參數(shù)待換
function (response) {//假設(shè)返回的src數(shù)組為imgList
for(var i = 0;i< response.imgList.length; i++){
imgs[i].src=response.imgList[i];
}
});
//js注冊函數(shù),沒用可刪除
/*bridge.registerHandler('callJSHandler', function (data, responseCallback) {
responseCallback(responseData);
});*/
//圖片點擊事件
for(var i = 0;i< imgs.length; i++){
imgs[i].onclick(function(){
bridge.callHandler(
'callMobileHandler',//名稱待換
{"currentImg": imgs[i].src, "deviceType": "ios"},//參數(shù)待換
function (response) {
//內(nèi)容待寫
});
//js獲得ios端參數(shù)函數(shù),沒用可刪除
/*bridge.registerHandler('callJSHandler', function (data, responseCallback) {
responseCallback(responseData);
});*/
});
}
});
我想問一下我想寫多個callhandle函數(shù),是應(yīng)該調(diào)用多次這個橋接函數(shù)呢,還是在一個函數(shù)里重復(fù)寫幾遍呢,或者是其他方法?目前只有第一個功能實現(xiàn)了,剩下的傳遞圖片數(shù)組和圖片點擊事件都沒有傳遞過去,該怎么辦?
封裝一下
import ua from './ua'
const callHandlers = []
const registerHandlers = []
const JCBridge = {
call(...args) {
callHandlers.push(args)
},
register(...args) {
registerHandlers.push(args)
},
}
const jsBridge = window.WebViewJavascriptBridge
/**
* 獲取ios 的bridge object
* https://github.com/marcuswestin/WebViewJavascriptBridge
* @param {Function} initBridge [description]
* @return {[type]} [description]
*/
function initIosBridge(initBridge) {
if (jsBridge) {
return initBridge(jsBridge)
}
if (window.WVJBCallbacks) {
return window.WVJBCallbacks.push(initBridge)
}
window.WVJBCallbacks = [initBridge]
let doc = document
let iframe = doc.createElement('iframe')
iframe.style.display = 'none'
iframe.src = 'wvjbscheme://__BRIDGE_LOADED__'
doc.body.appendChild(iframe)
setTimeout(() => {
doc.body.removeChild(iframe)
})
}
/**
* 獲取android 的bridge object
* https://github.com/lzyzsd/JsBridge
* @param {Function} initBridge [description]
* @return {[type]} [description]
*/
function initAdrBridge(initBridge) {
if (jsBridge) {
return initBridge(jsBridge)
}
document.addEventListener('WebViewJavascriptBridgeReady', () => {
// 后端派發(fā)時間之前會設(shè)置這個值
initBridge(window.WebViewJavascriptBridge)
}, false)
}
/**
* 根據(jù)環(huán)境暴露bridge object
* @param {[type]} bridge [description]
* @return {[type]} [description]
*/
function initBridge(bridge) {
bridge.init && bridge.init()
if (bridge) {
JCBridge.call = bridge.callHandler
JCBridge.register = bridge.registerHandler
if (callHandlers.length) {
callHandlers.forEach(call => {
JCBridge.call(...call)
})
}
if (registerHandlers.length) {
registerHandlers.forEach(register => {
JCBridge.register(...register)
})
}
}
}
if (ua.ios) {
initIosBridge(initBridge)
} else if (ua.android) {
initAdrBridge(initBridge)
}
export default JCBridge
// bridge.call 調(diào)用native提供的方法
// - bridge.call('setWebviewAttr', {}) 設(shè)置webview
北大青鳥APTECH成立于1999年。依托北京大學(xué)優(yōu)質(zhì)雄厚的教育資源和背景,秉承“教育改變生活”的發(fā)展理念,致力于培養(yǎng)中國IT技能型緊缺人才,是大數(shù)據(jù)專業(yè)的國家
北大青鳥中博軟件學(xué)院創(chuàng)立于2003年,作為華東區(qū)著名互聯(lián)網(wǎng)學(xué)院和江蘇省首批服務(wù)外包人才培訓(xùn)基地,中博成功培育了近30000名軟件工程師走向高薪崗位,合作企業(yè)超4
中公教育集團創(chuàng)建于1999年,經(jīng)過二十年潛心發(fā)展,已由一家北大畢業(yè)生自主創(chuàng)業(yè)的信息技術(shù)與教育服務(wù)機構(gòu),發(fā)展為教育服務(wù)業(yè)的綜合性企業(yè)集團,成為集合面授教學(xué)培訓(xùn)、網(wǎng)
達(dá)內(nèi)教育集團成立于2002年,是一家由留學(xué)海歸創(chuàng)辦的高端職業(yè)教育培訓(xùn)機構(gòu),是中國一站式人才培養(yǎng)平臺、一站式人才輸送平臺。2014年4月3日在美國成功上市,融資1
曾工作于聯(lián)想擔(dān)任系統(tǒng)開發(fā)工程師,曾在博彥科技股份有限公司擔(dān)任項目經(jīng)理從事移動互聯(lián)網(wǎng)管理及研發(fā)工作,曾創(chuàng)辦藍(lán)懿科技有限責(zé)任公司從事總經(jīng)理職務(wù)負(fù)責(zé)iOS教學(xué)及管理工作。
浪潮集團項目經(jīng)理。精通Java與.NET 技術(shù), 熟練的跨平臺面向?qū)ο箝_發(fā)經(jīng)驗,技術(shù)功底深厚。 授課風(fēng)格 授課風(fēng)格清新自然、條理清晰、主次分明、重點難點突出、引人入勝。
精通HTML5和CSS3;Javascript及主流js庫,具有快速界面開發(fā)的能力,對瀏覽器兼容性、前端性能優(yōu)化等有深入理解。精通網(wǎng)頁制作和網(wǎng)頁游戲開發(fā)。
具有10 年的Java 企業(yè)應(yīng)用開發(fā)經(jīng)驗。曾經(jīng)歷任德國Software AG 技術(shù)顧問,美國Dachieve 系統(tǒng)架構(gòu)師,美國AngelEngineers Inc. 系統(tǒng)架構(gòu)師。