Android Webview + WebViewClient + javascript + аппаратный ввод

У меня есть веб-просмотр, который должен различать внутренние ссылки сайта и внешние ссылки. Я добиваюсь такого поведения, добавляя привязку html с именем "#external" к каждому URL-адресу ссылки, который содержит html-атрибут target="_blank" с помощью javascript и проверяя URL-адреса с помощью WebViewClient.

долженОверрайдурллоадинг

Это решение отлично работает, пока пользователь выбирает ссылку на сенсорном экране. Если пользователь выбирает ссылку с аппаратным методом ввода (например, шариком прокрутки или клавишей ввода), привязка html отсутствует в URL-адресе запроса, и в результате мое обнаружение внешней ссылки не будет работать.

Любые идеи о том, что происходит не так?

Заранее спасибо, алекс


person alexleutgoeb    schedule 29.03.2010    source источник


Ответы (1)


У меня такое же поведение в моем приложении, и оно ухудшается, когда вам нужно использовать javascript на страницах (если вы нажмете ссылку с помощью трекбола, событие может не быть передано каким-либо слушателям javascript).

Я нашел два решения:

1. Не используйте функцию shouldOverrideUrlLoading, так как при ее использовании JavaScript не будет работать с событиями трекбола. Вы можете работать с методами onPageStarted и onPageFinished, НО Android может открывать браузер каждый раз, когда вы касаетесь ссылки, поэтому вам потребуется некоторая творческая работа с javascript, чтобы обойти это.

2 – Полностью отключите трекбол, если вы собираетесь использовать веб-просмотр с каким-либо javascript и по-прежнему использовать shouldOverrideUrlLoading.

    @Override
public boolean onTrackballEvent (MotionEvent event)
{
        return true;
}

Мое приложение имеет номер 2.

person leparlon    schedule 27.08.2010
comment
В настоящее время я делаю номер 3, игнорируя поведение и надеясь, что мои пользователи вообще не используют аппаратные входы. ;) - person alexleutgoeb; 06.11.2010
comment
ха-ха, вы могли бы просто отключить трекбол и проблемные кнопки, в любом случае это не похоже на компонент Android по умолчанию (может быть, поэтому он такой глючный). - person leparlon; 08.11.2010