Android Webview获取网页标题和文本内容
来源:互联网 发布:全球电视台直播软件 编辑:程序博客网 时间:2024/05/22 14:35
通过自定义webview实现类似IOS webview中的stringByEvaluatingJavaScriptFromString方法获取js中的文本简介,代码如下:
public class MyWebView extends WebView { public MyWebView(Context context) { super(context); } public MyWebView(Context context, AttributeSet attrs) { super(context, attrs); } public MyWebView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } public String stringByEvaluatingJavaScriptFromString(String script) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { try { Field mp = WebView.class.getDeclaredField("mProvider"); mp.setAccessible(true); Object webViewObject = mp.get(this); Field wc = webViewObject.getClass().getDeclaredField("mWebViewCore"); wc.setAccessible(true); Object webViewCore = wc.get(webViewObject); Field bf = webViewCore.getClass().getDeclaredField("mBrowserFrame"); bf.setAccessible(true); Object browserFrame = bf.get(webViewCore); Method stringByEvaluatingJavaScriptFromString = browserFrame.getClass() .getDeclaredMethod("stringByEvaluatingJavaScriptFromString", String.class); stringByEvaluatingJavaScriptFromString.setAccessible(true); Object obj_value = stringByEvaluatingJavaScriptFromString.invoke( browserFrame, script); return String.valueOf(obj_value); } catch (Exception e) { Log.e("!!!", "stringByEvaluatingJavaScriptFromString", e); } return null; } else { try { Field[] fields = WebView.class.getDeclaredFields(); // 由webview取到webviewcore Field field_webviewcore = WebView.class.getDeclaredField("mWebViewCore"); field_webviewcore.setAccessible(true); Object obj_webviewcore = field_webviewcore.get(this); // 由webviewcore取到BrowserFrame Field field_BrowserFrame = obj_webviewcore.getClass().getDeclaredField( "mBrowserFrame"); field_BrowserFrame.setAccessible(true); Object obj_frame = field_BrowserFrame.get(obj_webviewcore); // 获取BrowserFrame对象的stringByEvaluatingJavaScriptFromString方法 Method method_stringByEvaluatingJavaScriptFromString = obj_frame.getClass() .getMethod("stringByEvaluatingJavaScriptFromString", String.class); // 执行stringByEvaluatingJavaScriptFromString方法 Object obj_value = method_stringByEvaluatingJavaScriptFromString.invoke( obj_frame, script); // 返回执行结果 return String.valueOf(obj_value); } catch (Exception e) { Log.e("!!!", "stringByEvaluatingJavaScriptFromString", e); } return null; } }}
在网页中添加一段js, 包含需要获取文本的字段,如果要兼容微信分享,则定义的变量需和公众号里的是一样的,如下:
使用示例:
public class CommonWebActivity extends BaseActivity { private MyWebView mWebView; private String mTitle = ""; private String url = ""; private String msgTitle;//分享标题 private String msgDesc;//分享描述 private String msgImgUrl;//分享图片 private String msgLink;//分享链接 private boolean canShare = false;//是否支持分享 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_common_webview); init(); } private void init() { mWebView = (MyWebView) findViewById(R.id.webView); WebSettings settings = mWebView.getSettings(); settings.setJavaScriptEnabled(true); settings.setCacheMode(WebSettings.LOAD_NO_CACHE); settings.setLoadWithOverviewMode(true); settings.setUseWideViewPort(true); settings.setJavaScriptCanOpenWindowsAutomatically(true); mWebView.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY); mWebView.setHorizontalScrollBarEnabled(false); mWebView.setHorizontalScrollbarOverlay(true); mWebView.setWebViewClient(getViewClient()); mWebView.setWebChromeClient(getChromeClient()); initIntentData(); loadData(); } private void initIntentData() { Intent intent = getIntent(); if (null != intent) { url = intent.getStringExtra("url"); } } private WebViewClient getViewClient() { return new WebViewClient(){ @Override public void onPageStarted(WebView view, String url, Bitmap favicon) { super.onPageStarted(view, url, favicon); } @Override public void onPageFinished(WebView view, String url) { setRightTilteText("分享"); msgDesc = mWebView.stringByEvaluatingJavaScriptFromString("msg_desc"); msgTitle = mWebView.stringByEvaluatingJavaScriptFromString("msg_title"); msgLink = mWebView.stringByEvaluatingJavaScriptFromString("msg_link"); Log.d(TAG, msgTitle + "/" + msgDesc + "/" + msgLink); super.onPageFinished(view, url); } @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { return super.shouldOverrideUrlLoading(view, url); } }; } private WebChromeClient getChromeClient() { return new WebChromeClient(){ //获取网页标题的另一种方式 @Override public void onReceivedTitle(WebView view, String title) { super.onReceivedTitle(view, title); mTitle = title; setTitle(mTitle); } }; } private void loadData() { mWebView.loadUrl(url); } @Override protected void onDestroy() { if (null != mWebView) { mWebView.destroy(); } super.onDestroy(); } @Override protected void onRightTitleClick() { //分享 }}
0 0
- Android Webview获取网页标题和文本内容
- 获取网页中的密码和文本输入框的内容
- Android WebView 获取网页的标题
- webview获取网页标题
- ANDROID获取WEBVIEW中网页的TITLE(标题)信息
- 如何获取网页中的密码和文本输入框的内容
- Android----webview 去除网页标题
- android webview获取网页内容,高版本api解决办法
- 标题和文本
- Android WebView获取网站标题
- 得到一个网页的内容(命令方式和文本方式)
- 关联网页可信度分析和文本内容(IEEE2014)
- 获取WebView里的网页文本内容
- 在WebView中获取网页中的内容
- Android-webview加载网页去除标题
- 获取JTextarea指定行的行数和文本内容
- android 获取网页内容
- android webView 获取网页数据
- XMPP系列(七)---获取群组列表
- 五十道编程小题目 --- 28 八大排序算法 java 之 07归并排序
- iOS开发中按钮多次响应问题解决方案
- 基础备忘:static关键字总结
- java中的方法
- Android Webview获取网页标题和文本内容
- cocoa pods的安装与我遇到的问题
- ora-01513
- Glide 源码分析
- 【树状数组】CSU 1811 Tree Intersection (2016湖南省第十二届大学生计算机程序设计竞赛)
- 序列化和反序列化
- redis 命令讲解
- Unbutu下mysql的启用/停止/重启
- 判断某个界面是否在前台