Android:获取元名称="说明"在Webview中

时间:2013-09-05 09:17:56

标签: android html html-parsing android-webview meta-tags

我正在制作一个使用Android WebView的应用程序。此应用程序显示加载的URL的页面标题和页面描述。作为我正在使用以下网址的示例

http://in.news.yahoo.com/ca-chief-slams-racist-comments-over-fawad-ahmeds-071749766.html?.tsrc=yahoo

轻松获取页面标题

public void onPageFinished (WebView view, String url) {
    String title = view.getTitle();
}

如果您在Chrome中查看上述网址的观看源,则会从

中提取此标题
<title>CA chief slams `racist` comments over Fawad Ahmed's `beer-branded kit` refusal - Yahoo! News India</title>

现在,我需要获取元名称“描述”,以便显示页面描述,如下所示

<meta name="description" lang="en-IN" content="'CA chief slams `racist` comments over Fawad Ahmed's `beer-branded kit` refusal' on Yahoo! News India. Islamabad, Sept 5 (ANI): Cricket Australia (CA) chief James Sutherland has slammed 'racist comments' aimed at Pakistan-born Australian leg-spinner Fawad Ahmed following his refusal to wear a kit displaying the logo of beer brand VB due to 'religious reasons'."/>

Android网页视图没有API来从元标记“description”获取描述。

如何从文档元素中获取元标记?

4 个答案:

答案 0 :(得分:1)

您可以通过以下方式解决问题:

private class JsInterface {
    @JavascriptInterface
    @SuppressWarnings("unused")
    public void processHTML(String content) {
        //handle content
    }
}


mWebView.addJavascriptInterface(new JsInterface(), "CC_FUND");

mWebView.setWebViewClient(new WebViewClient() {
        @Override
        public void onPageFinished(WebView view, String url) {
            mWebView.loadUrl("javascript:window.CC_FUND.processHTML( (function (){var metas = document.getElementsByTagName('meta'); \n" +
                    "\n" +
                    "   for (var i=0; i<metas.length; i++) { \n" +
                    "      if (metas[i].getAttribute(\"name\") == \"description\") { \n" +
                    "         return metas[i].getAttribute(\"content\"); \n" +
                    "      } \n" +
                    "   } \n" +
                    "\n" +
                    "    return \"\";})() );");
            super.onPageFinished(view, url);
        }
}

答案 1 :(得分:0)

我认为你要找的是String.contains("meta name=\"description\"")

无论如何,这将是最简单的方法。您可以将how to get html content from a webview?

中的代码的结果拼凑在一起

另一种方法是使用WebView.addJavascriptInterface()从murala的答案中插入代码,但我不确定如何检索结果。用我的第一个想法。

答案 2 :(得分:0)

科特琳代码: 如果您使用evaluateJavascript,则无需定义javascriptInterface。

调用evaluateJavascript,然后使用ValueCallback<String> resultCallback回调值。

                webview.evaluateJavascript(
                        """
                            function getOGPImageUrl(){
                                var metas = document.getElementsByTagName('meta');
                                for (var i=0; i<metas.length; i++) { 
                                    if (metas[i].getAttribute("property") == "og:image") {
                                        return metas[i].getAttribute("content");
                                    }
                                }
                                return "";
                            };
                            getOGPImageUrl();
                        """.trimIndent()) {
                    // this is ValueCallback block
                    Logger.d("getOGPImageUrl: $it")
                }

答案 3 :(得分:-1)

document.getElementsByName("title");返回一组元素而不是单个元素,因此在一个周期内,您可以使用element.tagName来获取代码

basicly document.getElementsByName("title")[0]。tagName应该可以正常工作

(或) 只需使用:

var author = $('meta[name=author]').attr("content");