Веб-обзор Android: выделите определенное слово на странице, используя JavaScript? - PullRequest
4 голосов
/ 14 марта 2011

Я использую веб-просмотр внутри моего приложения для Android.Я хотел бы знать, можно ли выделить или подчеркнуть определенное слово / предложение / абзац на загруженной странице, используя код, выполненный в javascript?

спасибо

Ответы [ 4 ]

15 голосов
/ 06 июня 2011

Почему ты не можешь попробовать это? titleWebView - это WebView, в котором загружен или загружен HTML. searchText должен содержать текст для поиска. Я создал диалоговое окно для получения поисковых запросов от пользователя и перезагружал веб-страницу каждый раз, когда пользователь нажимает на запрос. Все термины, содержащие searchText, выделены (светло-зеленый на моем Nexus One). Надеюсь, это поможет.

titleWebView.setWebViewClient(new WebViewClient() {

    @Override
    public void onPageFinished(WebView view, String url) {
        if (searchText != null && !searchText.equals("")) {
            int i = titleWebView.findAll(searchText);
            Toast.makeText(getApplicationContext(), "Found " + i + " results !",
                Toast.LENGTH_SHORT).show();
            try {
                Method m = WebView.class.getMethod("setFindIsUp", Boolean.TYPE);
                m.invoke(titleWebView, true);
            } catch (Throwable ignored) {
            }
            searchText = "";
        }
    }
});
4 голосов
/ 14 марта 2011

Вы должны посмотреть на эту страницу . Сделайте просмотр источника.

Они используют чистый Javascript - даже не jQuery - для выделения определенных слов на веб-странице.

В основном они загружают весь текст, который хотят найти, в переменную и постоянно находят indexOf поисковый термин, который они хотят выделить. Когда они находят индекс этого термина, они строят новую строку со всем перед этим индексом + a <span class="highlighted"> + поисковый термин + </span>. Затем они продолжают поиски. После поиска и восстановления всего текста они заменяют старый текст в DOM новым текстом.

У них также есть немного CSS по аналогии с .highlighted { background-color: yellow; }

2 голосов
/ 22 сентября 2015

findAll () устарела! Вы можете использовать findAllAsync () от API16 и далее простым способом, подобным этому:

webView.setWebViewClient(new WebViewClient(){
            @TargetApi(Build.VERSION_CODES.JELLY_BEAN)
            @Override
            public void onPageFinished(WebView view, String url) {
                if (searchText != null && !searchText.equals("")) {
                    webView.findAllAsync(searchText);
                }
            }
        });
0 голосов
/ 16 мая 2012

Код

Method m = WebView.class.getMethod("setFindIsUp", Boolean.TYPE);
m.invoke(titleWebView, true);

После этого теста используйте следующий код.

findAll("search text")

Когда текст соответствует Toast Дисплей.

...