Mr.*_*. S 14 javascript android android-webview
我目前正在webview中以HTML格式向用户显示一堆数据.我在每个条目下面都有一些链接,单击时应该在我的应用程序中调用方法.Android WebView的javascript界面似乎是处理这些事情的最佳(唯一?)方式.但是,每当我单击该链接时,都会收到以下错误消息:ERROR/Web Console(6112): Uncaught TypeError: Object [my namespace]@4075ff10 has no method 'edit' at [base URL]:55
我声明了以下接口:
public class JavaScriptInterface {
Context context;
JavaScriptInterface(Context c) {
context = c;
}
public void edit(String postid) {
Log.d("myApp", "EDIT!");
//do stuff
}
}
Run Code Online (Sandbox Code Playgroud)
然后我将它添加到我的WebView:
final WebView threadView = (WebView) findViewById(R.id.webViewThread);
threadView.getSettings().setJavaScriptEnabled(true);
threadView.addJavascriptInterface(new JavaScriptInterface(this), "Android");
Run Code Online (Sandbox Code Playgroud)
最后,我在我的HTML中调用它如下:
<div class="post-actions">
<div class="right">
<a onClick="Android.edit('4312244');">Edit</a>
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
当我通过模拟器或adb连接到我的手机调试我的应用程序时,真正的踢球者就是这一切.当我构建和发布应用程序时,它会中断.
我的智慧结束了.任何帮助或建议将不胜感激!
小智 19
我的2.3.3手机也有同样的问题.但是,由于我知道一个应用程序有效,另一个应用程序没有,我对此解决方法不满意.我发现了我的两个应用程序的不同之处.JavaScriptInterface损坏的那个使用Proguard.经过一番搜索后,我找到了解决方案.
简短摘要:接口JavascriptCallback,由JavaScriptInterface实现,并在proguard.conf中为Proguard添加了规则:
public interface JavascriptCallback {
}
public class JavaScriptInterface implements JavascriptCallback {
Context mContext;
/** Instantiate the interface and set the context */
JavaScriptInterface(Context c) {
mContext = c;
}
/** Show a toast from the web page */
public void showToast(String toast) {
Toast.makeText(mContext, toast, Toast.LENGTH_SHORT).show();
}
}
Run Code Online (Sandbox Code Playgroud)
proguard.cfg:
-keep public class YOURPACKAGENAMEHERE.JavascriptCallback
-keep public class * implements YOURPACKAGENAMEHERE.JavascriptCallback
-keepclassmembers class * implements YOURPACKAGENAMEHERE.JavascriptCallback {
<methods>;
}
Run Code Online (Sandbox Code Playgroud)