Я пытаюсь добавить javascript-интерфейс к WebView, который я нашел. Я следил за всем стандартным учебником и все еще боролся с задачей. При добавлении яваскрипта интерфейс, я не получаю никаких исключений и ошибок, но при явном вызове мост от JS, я получаю следующее сообщение об ошибке:addJavascriptInterface функция не работает на API 21
I/chromium: [INFO:CONSOLE(1)] "Uncaught ReferenceError: JSNativeBridge is not defined", source: (1)
Добавление яваскрипта интерфейса:
new Handler(context.getMainLooper()).post(new Runnable() {
@Override
public void run() {
WebView webView = webViews[0];
if (Constants.DEBUG_MODE) {
webView.setWebChromeClient(new WebChromeClient());
webView.getSettings().setJavaScriptEnabled(true);
}
ImpressionSyncJsInterface impressionSyncJsInterface = new ImpressionSyncJsInterface(context);
webView.addJavascriptInterface(impressionSyncJsInterface, JS_BRIDGE_NAME);
didAddInterfaceToWebView = true;
}
});
Мой интерфейс: открытый класс ImpressionSyncJsInterface { закрытый конечный контекстный контекст;
public ImpressionSyncJsInterface(Context context) {
this.context = context;
}
@JavascriptInterface
public void foo() {
Log.e("TEST", "test");
}
}
Выполнение JavaScript:
final String javascriptInjectionTest = "javascript: " + JS_BRIDGE_NAME + ".foo();";
new Handler(Looper.getMainLooper()).post(new Runnable() {
@Override
public void run() {
webView.loadUrl(javascriptInjectionTest);
}
});
Любая помощь будет оценена.
Пожалуйста, введите код javascript, из которого вы вызываете Java-класс. –
Я не вижу, чтобы какой-либо код загружал страницу перед попыткой доступа к инжектированному объекту. Сначала нужно загрузить некоторую страницу, см. Http://developer.android.com/reference/android/webkit/WebView.html#addJavascriptInterface(java.lang.Object,%20java.lang.String) –