Веб-просмотр Android: выделить определенное слово на странице с помощью javascript?

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

Благодарность


person ccot    schedule 14.03.2011    source источник
comment
да, возможно... что вы пробовали?   -  person Cristian    schedule 14.03.2011


Ответы (4)


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

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

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

У них также есть некоторый CSS в духе .highlighted { background-color: yellow; }

person Chris W.    schedule 14.03.2011
comment
Ого, моя ошибка, извините, я думал, вы говорите о старой простой веб-странице... Я не знаю, применимо ли это к веб-просмотру Android. - person Chris W.; 14.03.2011
comment
np, большое спасибо, это кажется полезным, я проверю, работает ли это для веб-просмотра, и я дам вам знать :) - person ccot; 14.03.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 = "";
        }
    }
});
person Ashok Goli    schedule 06.06.2011
comment
Если я не ошибаюсь, вы должны ссылаться на WebView view на findAll(searchText). Это должен быть такой же (уже полностью загруженный) веб-просмотр, как и файл titleWebView. - person Indrek Kõue; 01.11.2011
comment
Черт, я бы поставил 100 звезд, если бы мог - круто - person PhillyNJ; 14.12.2011
comment
Рад помочь :) Мне тоже было трудно понять это в первый раз. Документация Android помогает. - person Ashok Goli; 14.12.2011
comment
У меня тут проблема. Мой текст выделен, но всплывающее уведомление по-прежнему показывает Найдено 0 результатов!. Я не могу понять, почему?? Любую строку, которую я могу взять, она правильно их выделяет, но метод findAll() всегда возвращает 0. Будем признательны за любую помощь :) - person Antrromet; 29.02.2012
comment
Я попробовал это с парой веб-просмотров, и это всегда работало. Не могли бы вы опубликовать пример кода? - person Ashok Goli; 06.03.2012
comment
его работа. Перезагружайте веб-просмотр каждый раз, когда пользователь нажимает кнопку поиска, и вставляйте приведенный выше код в веб-просмотр. - person Sardar Khan; 24.10.2018

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);
                }
            }
        });
person Uncaught Exception    schedule 22.09.2015

Код

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

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

findAll("search text")

При совпадении текста отображается Toast.

person Youddh    schedule 16.05.2012