一处疑难杂症的术后总结:WebView和JavaScript之间的交互

这种。我先讲一下我们的处理过程。

话说知之为知之,不知百度知。所以在接到问题反馈后,我和同事明明先到百度上面搜索了一下,得到以下的结果:

在另一个网站里面,,有人建议在号码背后加上微信的官网地址。类似tel:19212345678#weixin.qq.com。我试了一下,还是老样子。

今天丁丁又在催问这个拨号的问题了,我说我只完成了50%,还有个小问题还没解决,我还不满意。丁丁狡猾地说道:如果你今天不能解决,我也不满意。下午我把手头上的任务完成了之后,就又开始研究这个奇葩的问题了。同事涛涛和华华也过来协助把脉。

同事涛涛在QQ上给我发的几个网址,我都点开一一试了下。

第一个是重写shouldOverrideUrlLoading(WebViewview,Stringurl)这个方法的,我回复说昨天已经试过了,能生效但是错误的界面还是会跟着弹出,体验不是很好;

,我回复说这个也试了,也是不起作用。

在同事华华的建议下,我把模拟器打开了,研究了下载整个拨号操作中的过程,花费了一些时间。除了证明shouldOverrideUrlLoading这段代码的判断是对的,并没有什么其他的收获。

addJavascriptInterface(”tel:XXX”>

1、在Android壳源码里面添加权限声明:

<uses-permission android:name="android.permission.CALL_PHONE" />

需要声明打电话的权限并获取用户授权,不然不能通过Android壳去执行拨号操作。如果你要是要发短信,那就是短信相关的权限啦,灵活处理;

2、在

contentWebView.getSettings().setJavaScriptEnabled(true);

这样才能在壳源码里面调用web

3、重写shouldOverrideUrlLoading(WebViewview,Stringurl)方法,对符合和不符合的两种URL进行判断,并执行不同的操作。示例代码如下:

public boolean shouldOverrideUrlLoading(WebView view, String url) {if (url.startsWith("tel:")) {Intent intent = new Intent(Intent.ACTION_VIEW,Uri.parse(url));startActivity(intent);return false;} else {view.loadUrl(url);return true;}}

4、在。示例代码如下:

function exitSys(tel){window.jsInterface.exitSys(tel);}

5、在

contentWebView.addJavascriptInterface(new JavascriptInterface(this),"jsInterface");public void exitSys(String number) {Intent intent = new Intent(Intent.ACTION_CALL,Uri.parse("tel:"+number));startActivity(intent);}<a href="tel:<s:property value='clientMobile' />" ><img src="<%=basePath %>crm/html5_new/myCustomer/images/phone.png"></a>$(document).ready(function(){$("a").each(function(){var u = navigator.userAgent;if(u.indexOf('iPhone') > -1){}else {if($(this).attr("href").length>4&&$(this).attr("href").indexOf("tel:")==0){$(this).attr("href","javascript:exitSys('"+$(this).attr("href").replace("tel:","")+"')");}}});});

人生就像一场旅行,不必在乎目的地,

一处疑难杂症的术后总结:WebView和JavaScript之间的交互

相关文章:

你感兴趣的文章:

标签云: