自从将我的 nexus 4 升级到 Android kitkat 后,我的应用程序停止工作。我在 webview 中使用 javascript 方法,但现在我的方法没有被调用。这就是我设置 webview 和加载我的 javascripts 的方式:
mWebview.getSettings().setJavaScriptEnabled(true);
JavaScriptInterface jsi = new JavaScriptInterface(mCtx);
mWebview.addJavascriptInterface(jsi, ANDROID_BRIDGE);
mWebview.setWebViewClient(new WebClient());
mWebview.setWebChromeClient(new OwnChromeClient());
mWebview.setWebContentsDebuggingEnabled(true);
mWebview.loadUrl("about:blank"); //load dummy url to onPageFinished called in webViewClient
和我的网络客户端:
public class WebClient extends WebViewClient {
@Override
public void onReceivedError(WebView view, int errorCode,
String description, String failingUrl) {
Log.e(WebClient.class.getSimpleName(), description + " code "
+ errorCode);
}
/**
* Load javascript into webview
*/
@Override
public void onPageFinished(WebView view, String url) {
ECalcMarblesWrapper wrapper = new ECalcMarblesWrapper(mCtx);
String javascripts = wrapper.getJavascripts();
String content = String.format(jsHtmlContainer, javascripts,
jsHelpFunctions);
view.loadUrl("javascript: " + content);
}
}
所有加载方法都被调用但是当我调用任何 javascript 方法时,这个错误被打印到控制台:
Uncaught ReferenceError: initForm is not defined
其中 initForm 是我的 javascript 方法。
在 api 18 上应用程序运行良好,我的方法中有 javascript 注释
最佳答案
如果应用程序的目标版本设置为 17 或更高,您需要在要导出到 Web View 的每个方法上方添加注释 @JavascriptInterface
。
关于javascript - 在 android kitkat 中调用 javascript 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21134097/