JavaScript onclick работает в браузерах, а не в Android WebView - PullRequest
0 голосов
/ 14 сентября 2018

У меня есть простое веб-приложение, которое я пытаюсь отобразить через Android WebView. Веб-страница состоит не более чем из одной HTML-таблицы. Каждая из ячеек указанной таблицы имеет свойство onclick, установленное на функцию javascript, которая вызывает окно с некоторой информацией.

Это хорошо работает во всех браузерах, как настольных, так и мобильных. Однако, когда я пытаюсь щелкнуть любую из ячеек таблицы через мой Android WebView, ничего не происходит, веб-страница, похоже, не распознает щелчки.

(Примечание: я включил JavaScript для веб-просмотра, он делает именно то, что должен, например, когда документ загружен, только он не распознает щелчки и не запускает соответствующие события.)

Я пытался найти ответ, но мне не повезло. Все темы, которые я нашел, были посвящены решению различных проблем.

Я не пытаюсь запустить код Android, вызывая функцию JavaScript, мне нужен только веб-сайт JS, чтобы распознавать щелчки.

Что я должен сделать, чтобы заставить эту работу? Заранее большое спасибо, и, пожалуйста, не расстраивайтесь, если моя терминология не подходит, я просто энтузиаст-самоучка.

Ответы [ 2 ]

0 голосов
/ 14 сентября 2018

Оказывается, проблема заключалась в том, что я использовал setOnTouchListener для обработки щелчков в WebView, и хотя я удостоверился, что возвращаю false, чтобы дать Android знать, что WebView будет обрабатывать щелчок дальше, что небывает.Я полагаю, что это можно исправить, вызвав super.OnTouchEvent(event) где-то в коде, но я не уверен, как именно я это сделаю, а также я нашел довольно простой подход, который, по моему мнению, делает этояснее, что на самом деле происходит.

Идея состоит в том, чтобы создать собственный класс "MyWebView", расширив WebView и переопределив метод onTouchEvent:

public class MyWebView extends WebView
{
    private GestureDetector mDetector;

    public MyWebView(Context context)
    {
        super(context);
        mDetector = new GestureDetector(context, new MyGestureListener());
    }

    @Override
    public boolean onTouchEvent(MotionEvent event)
    {
        mDetector.onTouchEvent(event);
        this.performClick();
        return super.onTouchEvent(event);
    }

    @Override
    public boolean performClick()
    {
        return super.performClick();
    }

    class MyGestureListener extends GestureDetector.SimpleOnGestureListener
    {
        @Override public boolean onDown(MotionEvent event)
        {
            return true;
        }

        @Override public boolean onSingleTapConfirmed(MotionEvent e)
        {
            //do stuff here
            return false;
        }
    }
}
0 голосов
/ 14 сентября 2018

Попробуйте

enter image description here

Затем в HTML, вызовите его прямо из тега кнопки:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...