我正在制作一个使用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”获取描述。
如何从文档元素中获取元标记?
答案 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");