Android 2.3 WebView AddJavascriptInterface解决办法

如果你也遇到跟我一样的问题,那么你比我幸运,因为你来到了这里。

至于为什么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

你可能感兴趣的:(Android 2.3 WebView AddJavascriptInterface解决办法)