Android webview:使用javascript突出显示页面中的特定单词?

时间:2011-03-14 03:57:33

标签: javascript android highlighting android-webview

我在我的Android应用程序中使用webview。我想知道是否可以使用javascript中的代码在加载的页面中突出显示或加下划线特定的单词/句子/段落?

感谢

4 个答案:

答案 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; }

的CSS

答案 2 :(得分:2)

不推荐使用findAll()!您可以使用API​​16中的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时显示。