Android 4.2.1,WebView和JavaScript界面​​中断

我有一个web浏览器添加的JavaScript界面​​,大多数设备上运行完美,除了那些运行Android 4.2.1的。

我删除了大部分的代码,并留下了一个非常基本的代码:

this.webView.getSettings().setJavaScriptEnabled(true); this.webView.setWebChromeClient(new WebChromeClient()); this.webView.addJavascriptInterface(new Object() { public void handshake() { Log.d("JS", "handshake no params"); } public void handshake(String json) { Log.d("JS", "handshake with params: " + json); } }, "Android"); 

在JavaScript的东西的testing代码如下所示:

 Android.handshake(); 

但是我在logcat中得到这个:

E / Web控制台:未捕获TypeError:对象[对象对象]没有方法'握手'

再一次,这个相同的确切的东西在我已经testing过的Android操作系统(<4.2.1)的设备中工作正常(最小版本是2.3.3)。

奇怪的是,如果我开始一个全新的项目,除了一个只有一个WebView的Activity,使用相同的代码,即使对于4.2.1,一切都可以正常工作,但是当它是我实际项目的一部分时, 。 没有什么我正在做的webview这是不包括在我提供的代码片段。

对我来说最奇怪的是,javascriptfind了Android对象,但它没有请求的方法(握手),那怎么可能呢?

任何帮助将不胜感激,因为这已经使我疯狂的过去2周左右(这是一个错误,我回到所有的时间,然后放弃等)。 谢谢。

从Android 4.2文档:

警告:如果您已将targetSdkVersion设置为17或更高,则必须将@JavascriptInterface注释添加到您希望可用的网页代码的任何方法(该方法也必须是公共的)。 如果您不提供注释,那么在运行Android 4.2或更高版本时,您的网页将无法访问该方法。

您必须在Java类中注解(@JavascriptInterface)方法,使其可用于JavaScript。

  public class JavaScriptInterface { Context context; JavaScriptInterface(Context c) { context = c; } @JavascriptInterface public void edit(String postid) { Log.d("myApp", "EDIT!"); //do stuff } } 

它为我工作。 试试这个。