js和native的官方交互方法考虑了半天,也没发现好的方法,所以从另外一个角度出发解决同步回调的问题。
WKWebView默认对JavaScript下alert类的方法(包括alert(),confirm(),prompt())做了拦截,实现WKWebView的三个代理方法可拦截此方法。因为prompt方法H5应用的相对少,所以采用该方法进行拦截处理。
具体实现方法如下:
1.js实现方法如下:
ps:其中字典中selector代表方法名,params代表参数,type用来标记是否拦截做同步处理。
2.ios实现方法
//runJavaScriptTextInputPanelWithPrompt prompt代理实现方法
首先javascript脚本是线性执行的<javascript>
运算A
运算B
运算C
</javascript>
执行了"A"才会执行B,然后才会执行C
之所以出现你说的异步现象。是因为你调用BMap.Map类getPoint是个ajax
这个ajax是一个http请求。不受javascript程序执行的限制
因为。getPoint就跳出了这个javascript脚本。自己去执行了,而脚本继续下一个语句alert(d1)
因此-----------
function(point){
if (point) {
map.centerAndZoom(point, 16)
map.addOverlay(new BMap.Marker(point))
d1=point.lng
}
}
----------------------
这个ajax反回后才执行的方法。并没有工作
所以d1没有=point.lng
如果象得到ajax请求后的d1结果
请在
d1=point.lng后面加入:
alert(d1)