您的位置:首页 > 移动开发 > Android开发

Android 2.3 WebView AddJavascriptInterface解决办法

2013-09-24 14:32 501 查看
如果你也遇到跟我一样的问题,那么你比我幸运,因为你来到了这里。

至于为什么WebView AddJavascriptInterface在Android 2.3的无法工作,这个无从深究。Google也没有去修复这个问题(当然其他版本不存在这个问题)。

接下来,我们来探讨下解决办法:

1.检测是否支持AddJavascriptInterface

在onCreate方法中,检测是否支持AddJavascriptInterface
try {

if (Build.VERSION.RELEASE.startsWith("2.3")) {

jsInterfaceBroken = true;

}

} catch (Exception e) {

}

if (!jsInterfaceBroken) {

webView.addJavascriptInterface(new JsInterface(), "Android");

}


2.在自定义的webview里,构造一个请求。
@Override

public void onPageFinished(WebView view, String url) {

super.onPageFinished(view, url);

if (jsInterfaceBroken) {

String handlerJsUrl = "javascript:function internalFunc(url) {window.location='http://Android:internalFunc:'+url; }; "

+ "javascript: function android() { this.internalFunc=internalFunc; }; "

+ "javascript: var Android = new android();";

view.loadUrl(handlerJsUrl);

}

}


当然你也可以定义在onPageStarted方法里面,这似乎你的业务需求。

然后webview会执行多一次请求。然后我们可以捕获它,对它进行处理。

3.捕获请求,进行相应处理
@Override

public boolean shouldOverrideUrlLoading(WebView view, String url) {

if (jsInterfaceBroken && url.contains("Android:internalFunc")) {

String realUrl = url.replace("http://Android:internalFunc:", "");

return true;

}

return false;

}


当然了,具体的逻辑处理要视乎实际需求来处理,这里只是举个简单的例子。

现在Android 2.3也支持AddJavascriptInterface,祝你好运!

转载:http://blog.rebill.info/archives/handling-android-2-3-webviews-broken-addjavascriptinterface.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: