В моем проекте у меня есть WebView
который загружает страницу (HTML). Я хочу изменить все изображения и показать тост, когда пользователь нажимает на любое изображение.
Поэтому я добавляю код javascript, который вызывает функцию Java:
// code is inside onPageFinished(..) function
JavaScriptInterface jsInterface = new JavaScriptInterface(activity);
webView.getSettings().setJavaScriptEnabled(true);
webView.addJavascriptInterface(jsInterface, "JSInterface");
webView.evaluateJavascript(
"var imgs = document.getElementsByTagName('img');" +
"for (var i = 0; i < imgs.length; i++) {" +
"imgs[i].src = 'file:///android_asset/rules_images_placeholder.png';" +
"imgs[i].addEventListener('click', function() {" +
"window.JSInterface.showToast(); " + // <-- isn't called: see logs
"});" +
"} " +
"window.JSInterface.showToast();" // <-- is called
, null);
Класс JavaScriptInterface:
public class JavaScriptInterface {
private Activity activity;
public JavaScriptInterface(Activity activity) {
this.activity = activity;
}
@JavascriptInterface
public void showToast() {
Toast.makeText(activity, "Toast message", Toast.LENGTH_SHORT).show();
}
}
showToast()
следует вызывать, когда
-
страница закончила загрузку
-
Пользователь нажал на изображение
Проблема: showToast()
вызывается только один раз - когда страница закончила загрузку. Когда пользователь нажимает на изображение, showToast()
не вызывается, вместо этого появляется следующий журнал:
Uncaught TypeError: Не удается прочитать свойство showToast неопределенного ", source:
Вопрос
Как вызвать showToast()
при щелчке изображения?