冷秋魂的专栏 - 博客频道 - CSDN (2011-11-24) [作者:冷秋魂]
第一种办法:
直接解析请求到的网页的html中的title节点。
第二种办法:
- (void)webViewDidFinishLoad:(UIWebView )webView
{
titleLabeltext = [webView stringByEvaluatingJavaScriptFromString:@"documenttitle"];
}
==================================
Sodino的专栏 - 博客频道 - CSDN[作者:Sodino]]
[Android]
获取WebView的页面标题(Title) —— WebChromeClientonReceivedTitle()方法的重写
应用开发中需要获取WebView当前页面的标题,可能通过对WebChromeClientonReceivedTitle()方法的重写来实现。
效果图如下:
代码如下:
————————————————————————————
public class MainActivity extends Activity {
public void onCreate(Bundle savedInstanceState) {
superonCreate(savedInstanceState);
setContentView(Rlayoutmain_layout);
final TextView txtTitle = (TextView) findViewById(RidtxtTitle);
final WebView webView = (WebView)findViewById(RidbtnWebView);
WebChromeClient wvcc = new WebChromeClient() {
@Override
public void onReceivedTitle(WebView view, String title) {
superonReceivedTitle(view, title);
Logd("ANDROID_LAB", "title=" + title);
txtTitlesetText("ReceivedTitle:" +title);
}
};
// 设置setWebChromeClient对象
webViewsetWebChromeClient(wvcc);
// 创建WebViewClient对象
WebViewClient wvc = new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
// 使用自己的WebView组件来响应Url加载事件,而不是使用默认浏览器器加载页面
webViewloadUrl(url);
// 消耗掉这个事件。Android中返回True的即到此为止吧,事件就会不会冒泡传递了,我们称之为消耗掉
return true;
}
};
webViewsetWebViewClient(wvc);
final Button btnLoadWeb = (Button)findViewById(RidbtnLoadWeb);
btnLoadWebsetOnClickListener(new ButtonOnClickListener(){
public void onClick(View v){
webViewloadUrl(">
}
});
}
}
================================
=================================
本来打算上传源地址的 文本代码附件的,但无论TXT、ZIP还是7Z格式 都提示上传错误。所以如果您想要源文件,请百度搜这篇文章的标题,然后进入 CSDN博客社区 里这篇文章的页面,然后就能看到了。
=================================
Android移动开发技术文章__手机开发 -- 红黑联盟
自定义WebView显示网页标题和加载进度
Last Modified:2011-12-06
摘自“ BossDarcy ”的专栏
还是做一个应用用到的技术。很简单的一个就是将网页的标题获取到然后显示在Activity中的title上,并且在加载网页时显示进度条。
很简单,详见以下代码:
——————————————————————————————
package demoandroidyuewebview;
import androidappActivity;
import androidosBundle;
import androidwebkitWebChromeClient;
import androidwebkitWebView;
public class WebViewDemoActivity extends Activity {
private WebView webView;
/ Called when the activity is first created /
@Override
public void onCreate(Bundle savedInstanceState) {
superonCreate(savedInstanceState);
setContentView(Rlayoutmain);
//初始化WebView
thisinitWebView();
}
/
初始化WebView
/
private void initWebView(){
//从布局文件中扩展webView
thiswebView=(WebView)thisfindViewById(Ridwebview);
thiswebViewsetWebChromeClient(new chromeClient());
//加载地址 >
thiswebViewloadUrl(">
}
class chromeClient extends WebChromeClient{
@Override
public void onProgressChanged(WebView view, int newProgress) {
//动态在标题栏显示进度条
WebViewDemoActivitythissetProgress(newProgress100);
superonProgressChanged(view, newProgress);
}
@Override
public void onReceivedTitle(WebView view, String title) {
//设置当前activity的标题栏
WebViewDemoActivitythissetTitle(title);
superonReceivedTitle(view, title);
}
}
}
—————————————————————————————
重要的就是设置 WebChromeClient,WebChromeClient 是 WebView 的辅助类,用来处理 js 、favicon 和 标题 等一些 *** 作。
我发现没有办法从webView控件中直接提取内容,因此我写了一个>
The extensive Android SDK allows you to do many great things with particular views like the WebView for displaying webpages on Android powered devices
Android SDK 的扩展,通过使用特定的view,允许你做许多事情。比如,WebView,用来在Android手机上展示网页。
As of lately while I was experimenting with the Android SDK I was using a WebView in one of my activities
最近,我在体验Android SDK的时候,在一个Activity中用到了WebView。
From that particular WebView I needed to know the ContentHeight but also the ContentWidth
从WebView,我不但想要知道ContentHeight,还想知道ContentWidth。
Now getting the contentHeight is easy like so:
现在的情况是:获取contentHeight很easy,如下:
webviewgetContentHeight();
Unfortunately getting the contentWidth from a WebView is rather more difficult, since there is not a simple method like:
不幸的是,从一个WebView获取contentWidth是相当困难,因为SDK中没有一个像这样的方法:
// THIS METHOD DOES NOT EXIST!
webviewgetContentWidth();
There are ways to get the contentWidth of the rendered HTML page and that is through Javascript If Javascript can get it for you, then you can also have them in your Java code within your Android App
当然是有方法获取contentWidth的,就是通过Javascript来获取。如果你能够支持Javascript,那么你就可以在你的Android 程序中,使用java代码来获取宽度。
By using a JavascriptInterface with your WebView you can let Javascript communicate with your Android App Java code by invoking methods on a registered object that you can embed using the JavascriptInterface
通过在你的WebView中使用JavascriptInterface,通过调用你注册的JavascriptInterface方法,可以让Javascript和你的Android程序的java代码相互连通。
So how does this work
怎么做呢?
For a quick example I created a simple Activity displaying a webview that loads a webpage wich displays a log message and a Toast message with the contentWidth wich was determined using Javascript Note that this happens AFTER the page was finished loading, because before the page is finished loading the width might not be fully rendered Also keep in mind that if there is content loaded asynchronously that it doesn’t affect widths (most likely only heights will be affected as the width is almost always fully declared in CSS files unless you have a 100% width webpage)
搭建一个快速的例子:创建一个简单的展示webView的Activity,一个LogCat消息,一个Toast消息,用来显示我们通过Javascript获取的宽度。注意:这些会在网页完全加载之后显示,因为在网页加载完成之前,宽度可能不能够正确的获取到。同时也要注意到,如果是异步加载,这并不影响宽度(最多高度会受影响,因为宽度总是在CSS文件中做了完全的定义,除非在网页中你用了100%宽度。)。
Below is the code of the Activity Mainjava:
下面的代码是Activity的代码:
Mainjava
01 package compimmosandroidsampleswebviewcontentwidth;
02 import androidappActivity;
03 import androidosBundle;
04 import androidutilLog;
05 import androidwebkitWebView;
06 import androidwebkitWebViewClient;
07 import androidwidgetToast;
08 public class Main extends Activity {
09 private final static String LOG_TAG = "WebViewContentWidth";
10 private final Activity activity = this;
11 private static int webviewContentWidth = 0;
12 private static WebView webview;
13
14 / Called when the activity is first created /
15 @Override
16 public void onCreate(Bundle savedInstanceState) {
17 superonCreate(savedInstanceState);
18 setContentView(Rlayoutmain);
19 webview = (WebView) findViewById(Ridwebview);
20 webviewgetSettings()setJavaScriptEnabled(true);
21 webviewsetSaveEnabled(true);
22 webviewaddJavascriptInterface(new JavaScriptInterface(), "HTMLOUT");
23 webviewsetWebViewClient(new WebViewClient() {
24 @Override
25 public void onPageFinished(WebView view, String url) {
26 webviewloadUrl("javascript:windowHTMLOUTgetContentWidth(documentgetElementsByTagName(’html’)[0]scrollWidth);");
27 }//(">
步骤:
1 创建 一个 自己的WebViewClient(继承 WebViewClient 类)如 MyWebviewclient
2 重载 里面的 onPageFinished(WebView view, String url)方法,(webview加载完成会调用这个方法),这个方法放自己想要做的事情,在webview加载完成以后
3 关联 你自己的webviewclient 与 webview 通过 这个方法:webViewsetWebViewClient( new MyViewerWebViewClient();
android上webivew是个坑货,无疑!以前就曾出现过好几次莫名其妙的发出signal退出进程的例子,你退就退对应的activity就行了,为啥要把整个进程干掉?这回遇到的是一个crash,基本都在8x机器上,而且绝大部分都是华为和荣耀机器,比如DUB-AL00占比三分之一。堆栈如下:
另外还有一个信息,crash的线程是在一个我用HandlerThread写的后台处理线程类A,这个类调用的地方不多,大概七八处。
解决思路:
一、先复现
根据上报的机型model和日志里的信息,发现是搜索某个特定的剧后crash的,找到相应的机器后,确实能复现,是个第三方的剧的网页,进去后播放没问题,但是如果做些点击的 *** 作就90%以上概率会crash,而且,同样的8x机器,非上报机型的华为或荣耀不能复现。
但是,同样的机型,使用同样sdk的公司内另一个app却没事。
二、可能性
对于1,尝试各方面对齐另一个app后,未果,一样crash。
对于2,找遍了各种调用方式上异同,比如传参等,未果,一样crash
那看起来是3了,但是不敢面对这个现实哈哈。
尝试通过breadpad来恢复堆栈,不可行,没有chrome的带symbol的so库。
想来想去,还是回到crash本身,为啥每次都在那个线程类A里,是上报系统不准还是确实和线程A有关,反正调用A的地方也不多,那索性都给注释了,再试,果然没问题,那接下来就简单了挨个排除就行了,最后发现是在那个线程里会读取剪贴板的地方有问题,不读剪贴板就行了。回过头看堆栈:
刚好可以对上,所以猜测,是非主线程里读取了剪贴板了,导致webview在主线程里对剪贴板相关 *** 作时崩溃,具体源码没去看了,有兴趣的可以研究下。
嗯,其实一开始就应该把线程A和堆栈里的Clipboard联想起来的。
解决方案:
线程A里调用剪贴板的地方,换成在主线程里调。
以上就是关于在android的webview里面怎么获取当前网页的标题全部的内容,包括:在android的webview里面怎么获取当前网页的标题、如何获取WebView中页面的Title信息、如何获取WebView的内容宽度等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)