【问题标题】:Android:Getting meta name="description" in WebviewAndroid:在 Webview 中获取元名称 =“描述”
【发布时间】:2013-09-09 01:21:13
【问题描述】:

我正在制作一个使用 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>

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

<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。

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

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

    【讨论】:

      【解决方案2】:

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

      无论如何,这将是最简单的方法。您可能可以拼凑出how to get html content from a webview? 中代码的结果

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

      【讨论】:

        【解决方案3】:

        你可以这样解决问题:

        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);
                }
        }
        

        【讨论】:

          【解决方案4】:

          Kotlin 代码: 如果您使用evaluateJavascript,则不需要定义javascriptInterface。

          调用evaluateJavascript 然后使用ValueCallback&lt;String&gt; 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")
                          }
          

          【讨论】:

            猜你喜欢
            • 2011-02-24
            • 2023-03-22
            • 1970-01-01
            • 2023-03-24
            • 1970-01-01
            • 2018-06-18
            • 1970-01-01
            • 1970-01-01
            • 2020-08-28
            相关资源
            最近更新 更多