js与ios交互,使用WebViewJavascriptBridge
js端:
<body>
<button>点我</button>
<input value="" id="res" type="text"/>
</body>
1,固定代码放js里:
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)
}
2,封成函数方便后面交互时调用:
nativeInteractive=function(fn,obj){
setupWebViewJavascriptBridge(function(bridge) {
if(obj){
bridge.callHandler('webview_call_native', obj, function(response) {});
}
bridge.registerHandler('native_call_webview', function(data,response) {
fn(data);
})
});
}
native_call_webview是要接受ios端参数的函数名;
webview_call_native是要传参给ios的参数名;
这两个名字要与ios端协商好;
3,调用:
$("button").click(function(){
var native=function(data){//data是ios向js传的参
if(data.say=="yes"){
$("#res").val(data.iosSay);
}
responseCallback({'jsSay': 'yes'});//收到参数回复ios
}
var requestH5={//js向ios传参
user_id:"js001",
jssay:"can you hear me?"
}
nativeInteractive(native,requestH5);
})