我可以从我的 phonegap java 脚本函数和 android 2.2 中使用 java 函数 但相同的代码未在 API 17 上运行。我应该怎么做才能从 API 17 中的 java 脚本调用 native 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 上运行此代码时,它给了我错误
Uncaught TypeError: Object [object Object] has no method 'login' at file:///android_asset/www/index.html:81
我如何在 api 17 上使用它
最佳答案
在 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;
您可以在此处了解更多信息: WebView Android
编辑:您必须在类中使用@JavascriptInterface 注释您希望从 Javascript 访问的每个方法。
关于java - appView.addJavascriptInterface() 不适用于 API 17,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16353430/