appView.addJavascriptInterface()不适用于API 17

我可以使用我的phonegap java脚本函数和android 2.2中的java函数,但是相同的代码不能在API 17上运行。我应该怎么做才能从API 17中的java脚本调用本机java代码。

我在我的java文件中使用此代码

objCustomNativeAccess = new CustomNativeAccess(this, appView); appView.addJavascriptInterface(objCustomNativeAccess, "CustomNativeAccess"); super.loadUrl("file:///android_asset/www/index.html"); 

我的CustomNativeAccess类是

 public class CustomNativeAccess { private WebView mAppView; private DroidGap mGap; /** * Constructor * * @param gap * @param view */ public CustomNativeAccess(DroidGap gap, WebView view) { mAppView = view; mGap = gap; } /** * Get the device phone number * * @return */ public JSONObject login(String email, String password) { JSONObject object = new JSONObject(); object.put("Login_Status", login_status); object.put("date", dateString); return object; } 

在我的java脚本中,我使用此行来调用此登录函数

  var value = window.CustomNativeAccess.login(email,pass); 

所以使用这个我在api 2.2上成功调用了这个,但是当我在api 17上运行这个代码时它给了我错误

未捕获的TypeError:对象[object Object]在file:///android_asset/www/index.html上没有方法’login’:81

我如何在api 17上使用它

  • Cordova PhoneGap从2.2.0升级到5.1.1
  • 如何将parameter passing给PhoneGap数据库事务函数
  • 用Javascript发送来自Android的二进制数据
  • 如何从phonegap插件获取android服务返回消息
  • 你有什么经验与Android的webapps(限制,技巧,最佳实践)?
  • 检测浏览器是否在网页上有键盘/箭头键
  • 如何仅检测原生Android浏览器
  • 如何检测Google Chrome浏览器是否模拟移动设备?
  • 您在API 17上要做的是使用@JavascriptInterface注释您的方法:

     Public class CustomNativeAccess { @JavascriptInterface 

    然后摆脱构造函数部分:

     /*private WebView mAppView; private DroidGap mGap; public CustomNativeAccess(DroidGap gap, WebView view) { mAppView = view; mGap = gap; } */ 

    还要确保在项目中导入JavascriptInterface:

      import android.webkit.JavascriptInterface; 

    你可以在这里阅读更多内容: http : //developer.android.com/reference/android/webkit/WebView.html#addJavascriptInterface%28java.lang.Object,%20java.lang.String%29

    编辑:您必须使用您希望从Javascript访问的类中的@JavascriptInterface注释每个方法。

    从Android 4.2文档:

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

    来源:Android WebView Doc(强调添加)

    我刚用addJavascriptInterface和API 17编写了Web应用程序,它运行良好。 我不知道你的代码发生了什么。 也许你可以试试这些:

    确保添加:

     WebSettings webSettings = appView.getSettings(); webSettings.setJavaScriptEnabled(true); 

    第二,为什么你使用super.loadUrl,而不是appView来加载html?

     objCustomNativeAccess = new CustomNativeAccess(this, appView); appView.addJavascriptInterface(objCustomNativeAccess, "CustomNativeAccess"); appView.loadUrl("file:///android_asset/www/index.html"); 

    解决方案:

    1. 将清单文件中的android:targetSdkVersion降低到16。
    2. 在project.properties:target target=android-17中将编译api级别更改为17,并使用@JavascriptInterface注释回调方法。