Я использую веб-просмотр внутри своего приложения для Android. Я хотел бы знать, можно ли выделить или подчеркнуть определенное слово/предложение/абзац на загруженной странице, используя код, выполненный в javascript?
Благодарность
Я использую веб-просмотр внутри своего приложения для Android. Я хотел бы знать, можно ли выделить или подчеркнуть определенное слово/предложение/абзац на загруженной странице, используя код, выполненный в javascript?
Благодарность
Вам следует просмотреть эту страницу. Сделайте исходник просмотра.
Они используют чистый Javascript — даже не jQuery — для выделения определенных слов на веб-странице.
По сути, они загружают весь текст, который они хотят найти, в переменную и непрерывно находят indexOf
условие поиска, которое они хотят выделить. Когда они находят индекс термина, они создают новую строку со всем, что предшествует этому индексу + <span class="highlighted">
+ поисковый термин + </span>
. Потом продолжают поиски. После поиска и перестроения всего текста они заменяют старый текст в DOM новым текстом.
У них также есть некоторый CSS в духе .highlighted { background-color: yellow; }
Почему ты не можешь попробовать это? 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 = "";
}
}
});
WebView view
на findAll(searchText)
. Это должен быть такой же (уже полностью загруженный) веб-просмотр, как и файл titleWebView
.
- person Indrek Kõue; 01.11.2011
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);
}
}
});
Код
Method m = WebView.class.getMethod("setFindIsUp", Boolean.TYPE);
m.invoke(titleWebView, true);
После этого теста с использованием следующего кода.
findAll("search text")
При совпадении текста отображается Toast
.