WebViewClient的onPageStarted

最近在学android,参考了一篇比较好的贴子,

android开发我的新浪微博客户端-OAuth认证过程中用WebView代替原来的系统自带浏览器

这的确是个不错的帖子,

很多人回帖说这短小代码写的有点瑕疵:返回pin码时,显示授权码的界面会显示几秒钟,而且多数时候我们都不需要去给用户显示这个页面。

再就是在我想来,不要让android去处理一些没必要的事件 也是对程序性能有极大提高,就如该贴中的

    wv.addJavascriptInterface(new JavaScriptInterface(), "Methods");

然后是 一连串的js嵌入,加载,运行,匹配字符串等等功能的执行...

    wv.loadUrl("javascript:window.Methods.getHTML(document.getElementsByTagName('span')[0].innerHTML);");

    (这些代码很有用,我也先在这里保留一份,js的强大无处不在)

想来,其实很简单,不要被发帖者的思路捆绑死了,程序开发举一反三是硬道理,

既然WebViewClient类 有onPageFinished() 的函数来执行页面载入完毕后要处理的事情,

那肯定也有函数在页面载入之前执行的...翻了翻,的确发现 onPageStarted() 函数,

就在 onPageStarted() 里面写点代码,就足以解决问题,而且不需要用到JS去获取该页面中的pin码。

在前面获取Request Token地址的步骤中,callback地址随便给个值,sina 就会给你返回带pin码的URL,分析这个URL把pin码截出来就好了

String requestTokenUrl = httpOauthprovider.retrieveRequestToken(httpOauthConsumer, "nic");

然后就是WebViewClient 的 onPageStarted() 函数了:

public void onPageStarted(WebView view, String url, Bitmap favicon) {
// System.out.println("start----url:" + url);
int start = url.indexOf(oauth.signpost.OAuth.OAUTH_VERIFIER);
if(start > -1){
String pinStr
= url.substring(start);
System.out.println(
"start----get it! " + pinStr);
intent.putExtra(
"oauth_verifier", pinStr);
setResult(RESULT_OK, intent);
finish();
}
else{
super.onPageStarted(view, url, favicon);
}
}

获取到所要的 oauth_verifier (即pin码)后,返回上一层Activity即可进行下一步处理。



posted on 2011-08-23 20:20  NicChen  阅读(2867)  评论(1)    收藏  举报