0

Android WebView を使用するアプリケーションを作成しています。このアプリケーションは、読み込まれた URL のページ タイトルとページの説明を表示します。サンプルとして、次の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 に答える