appView.addJavascriptInterface()不适用于API 17

viv*_*ari 21 javascript java android cordova

我可以使用我的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");
Run Code Online (Sandbox Code Playgroud)

我的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;
        }
Run Code Online (Sandbox Code Playgroud)

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

 var value = window.CustomNativeAccess.login(email,pass);
Run Code Online (Sandbox Code Playgroud)

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

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

我如何在api 17上使用它

ben*_*nka 39

您在API 17上要做的是使用@JavascriptInterface注释您的方法:

Public class CustomNativeAccess {
   @JavascriptInterface
Run Code Online (Sandbox Code Playgroud)

然后摆脱构造函数部分:

/*private WebView mAppView;
    private DroidGap mGap;
    public CustomNativeAccess(DroidGap gap, WebView view) {
        mAppView = view;
        mGap = gap;
    }
*/
Run Code Online (Sandbox Code Playgroud)

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

 import android.webkit.JavascriptInterface;
Run Code Online (Sandbox Code Playgroud)

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

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