我在我的Android应用程序中使用webview。我想知道是否可以使用javascript中的代码在加载的页面中突出显示或加下划线特定的单词/句子/段落?
感谢
答案 0 :(得分:15)
你为什么不试试这个? titleWebView是加载或加载html的WebView。 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 = "";
}
}
});
答案 1 :(得分:4)
你应该看看this page。做一个观察源。
他们使用纯Javascript - 甚至jQuery - 来突出显示网页上的特定单词。
基本上,他们将要搜索的所有文本加载到变量中,并不断找到要突出显示的indexOf
搜索词。当他们找到该术语的索引时,他们会构建一个新字符串,其中包含该索引之前的所有内容+ <span class="highlighted">
+搜索字词+ </span>
。然后他们继续搜索。一旦他们搜索并重建了所有文本,他们就会用新文本替换DOM中的旧文本。
他们还有一些.highlighted { background-color: yellow; }
答案 2 :(得分:2)
不推荐使用findAll()!您可以使用API16中的findAllAsync(),方法如下:
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);
}
}
});
答案 3 :(得分:0)
<强>代码强>
Method m = WebView.class.getMethod("setFindIsUp", Boolean.TYPE);
m.invoke(titleWebView, true);
使用以下代码进行此测试后。
findAll("search text")
当文字匹配Toast
时显示。