无法识别的 JavaScriptInterface 方法(Android webview)

标签 javascript java android ajax webview

我的 MainActivity 中有:

 webView.addJavascriptInterface( new JavaScriptInterface( this ), "ajaxHandler" );
....
 public class JavaScriptInterface
    {
        Context mContext;

        JavaScriptInterface( Context c ) {
            mContext = c;
        }

        public void DoSomething( String dataToPrint )
        {
          .....
        }
}

我读到问题可能出在混淆器上。 所以我更新了 proguard 规则文件:

-keepclassmembers class fqcn.of.javascript.interface.for.webview {
     public *;
 }

-keep public class com.example.testapp.JavaScriptInterface
-keep public class * implements com.example.testapp.JavaScriptInterface
-keepclassmembers class * implements com.example.testapp.MainActivity.JavaScriptInterface{
    public *;
}

虽然它没有帮助...在 chrome 调试器中,因为我在控制台中放入了 ajaxHandler 对象和 DoSomething 方法,所以我可以将 ajaxHandler 对象视为 Object {} 但它是空的,并且方法 DoSomething 是 undefined

最佳答案

接口(interface)类

public class JavaScriptInterface
    {
        Context mContext;

        JavaScriptInterface( Context c ) {
            mContext = c;
        }
        @JavascriptInterface //add this
        public void DoSomething( String dataToPrint )
        {
          .....
        }
}

在proGuard.pro文件中

-keep public class com.example.testapp.MainActivity$JavaScriptInterface
-keep public class * implements com.example.testapp.MainActivity$JavaScriptInterface
-keepclassmembers class * implements com.example.testapp.MainActivity$JavaScriptInterface{
     <methods>;
}
-keepattributes *Annotation*

使用 $ 符号而不是 . 来获取内部接口(interface)类名。

关于无法识别的 JavaScriptInterface 方法(Android webview),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41828137/

相关文章:

android - 解析最近 5 分钟内创建的对象的查询

javascript - 将 Canvas 保存为图像 PaperJS

java - 有没有像eclipse那样读取私有(private)变量的方法?

java - 是否可以从另一个虚拟机中杀死一个 Java 虚拟机?

android - 约束布局隐藏带有链权重的 View

android - SherlockActivity 中的 MapView

javascript - 辅助功能 - 提醒用户按钮内的动态文本更改

javascript - 使 Javascript 正则表达式不区分大小写

javascript - ExtJS 4.2.1 如何组织Viewport空间

java - 自定义比较器