【WKWebview填坑(三)】wkwebview和js传值同步回调

JavaScript07

【WKWebview填坑(三)】wkwebview和js传值同步回调,第1张

和h5联调的时候遇到需要同步返回值得情况,之前的匿名函数回调已经不能实现该需求,所以想了另外一种方法实现该方法。

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)