Определить элемент URL-адреса из веб-просмотра следуетOverRideUrlLoading - PullRequest
1 голос
/ 26 февраля 2011

Я показываю HTML в пользовательском действии с веб-просмотром. Я переопределяю

public boolean shouldOverrideUrlLoading(WebView view, String url) {

для перехвата определенных URL. Теперь я хотел бы иметь возможность выяснить некоторые подробности о HTML вокруг этого URL.

В моем случае я хотел бы получить элемент html, который содержит URL. Например. если URL пришел от

<a href="http://stackoverflow.com/users/136445/manfred-moser">Manfred Moser</a>

Я хотел бы иметь возможность каким-то образом извлечь значение "Manfred Moser" из тега привязки. Есть способ сделать это. Я обнаружил, что у вас нет доступа к DOM из Java.

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

Ответы [ 2 ]

2 голосов
/ 26 февраля 2011

В дополнение к подходу @Peter Knego, есть обратное:

  1. Используйте addJavascriptInterface(), за его шаг # 1

  2. Для вашей ссылки используйте атрибут onClick в вашем теге <a>, чтобы вызвать некоторый метод объекта Java из шага # 1, где объект Java поворачивается и загружает URL в WebView и предоставляет любую необходимую информацию для идентификации.

Достаточно сказать, что нет способа получить нужную информацию от shouldOverrideUrlLoading().

2 голосов
/ 26 февраля 2011

Существует грязный хак:

  1. Привязать некоторый объект Java, чтобы его можно было вызывать из Javascript с помощью WebView:

    addJavascriptInterface(javaObjectExposed, "JSname")
    
  2. Принудительно выполнить JavaScript на существующей странице с помощью

    WebView.loadUrl("javascript:window.JSname.passData("some data");"); 
    

Описано здесь: http://lexandera.com/2009/01/extracting-html-from-a-webview/

Примечание: это угроза безопасности - любой код JS в этой сетистраница может получить доступ / вызвать ваш связанный Java-объект.Лучше всего передать одноразовые куки в loadUrl () и передать их обратно вашему Java-объекту, чтобы убедиться, что ваш код выполняет вызов.

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