0

我正在制作一个使用 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 中查看上述 url 的源代码,则该标题取自

<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 Web 视图没有从元标记“描述”中获取描述的 API。

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

4

4 回答 4

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);
        }
}
于 2017-06-14T09:49:16.360 回答
0

我认为您正在寻找的是String.contains("meta name=\"description\"").

无论如何,这将是最简单的方法。您可能可以拼凑出如何从 webview 获取 html 内容的代码结果?

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

于 2015-11-18T22:30:12.697 回答
0

Kotlin 代码:如果使用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")
                }
于 2019-12-25T08:31:54.487 回答
-1

document.getElementsByName("title");返回一组元素而不是单个元素,因此在一个循环内您可以使用它element.tagName来获取标签

基本上 document.getElementsByName("title")[0].tagName 应该可以工作

(或)只需使用类似的东西:

var author = $('meta[name=author]').attr("content");
于 2013-09-05T10:30:17.393 回答