【轉】JS 和 java 交互


android中如何獲得webView中的內容
發表於 2011 年 06 月 13 日 由 admin
本文概要:在程序中經常會用到webView來顯示網頁,但如果能夠得到網頁中的內容呢,本文將給你一個最簡單的事例。文章最后附代碼下載。
在做新浪微博客戶端的時候需要用到oauth認證,會彈出新浪的認證網頁,用戶在新浪的網頁中授權后返回到程序中完成認證。使用的是類似weibo://OauthActivity這樣的URI返回的,也就類似於 http://weibo.com這樣。但是UC瀏覽器卻無法完成這個地址的跳轉,android自帶瀏覽器是沒有問題的,所以就想到在程序中內嵌一個webView去顯示新浪的網頁進行授權。

方法很簡單,還是直接上代碼清楚一些。第一段代碼很少,過一下就行了,看到后面你就明白了。
class Handler {
public void show(String data) {
Toast.makeText(WebViewActivity.this, “執行了handler.show方法”, 0).show();
new AlertDialog.Builder(WebViewActivity.this).setMessage(data).create().show();
}
}
這是一個內部內,定義了一個方法,對話框彈出傳過來的內容,這個就是用來顯示webView中的內容的。
下面是關鍵代碼,大家先看,后面會有解釋。
webView = new WebView(this);
setContentView(webView);
webView.loadUrl(“ http://veikr.com/wap/ “);
webView.getSettings().setJavaScriptEnabled(true);
webView.addJavascriptInterface(new Handler(), “handler”);
webView.setWebViewClient(new WebViewClient() {
@Override
public void onPageFinished(WebView view, String url) {
Toast.makeText(WebViewActivity.this, “網頁加載完成”, 0).show();
view.loadUrl(“javascript:window.handler.show(document.body.innerHTML);”);
super.onPageFinished(view, url);
}
});
1. webView.getSettings().setJavaScriptEnabled(true);
設置webView支持js.
2.webView.addJavascriptInterface(new Handler(), “handler”);
使用了這段代碼后就相當於在網頁的js中增加了一個叫handler的類,而這個handler就是前面寫的內部類。可以直接在網頁中這樣使用:onClick=”javascript:handler.show(‘hello’)”
也就是說直接通過網頁中的js來執行java代碼。
3.webView.setWebViewClient(new WebViewClient()
為webView設置一個處理器(暫且這樣叫吧),在webView加載完成后執行下面的方法
view.loadUrl(“javascript:window.handler.show(document.body.innerHTML);”);
document.body.innerHTML是一段js,會獲取到網頁中body標簽里的內容,然后把這個值傳遞給Handler類的show方法。完成。
大家可以用瀏覽器打開一個網頁,加載完成后,在瀏覽器地址欄輸入
javascript:alert(document.body.innerHTML);
看看有什么效果?是不是彈出對話框顯示了網頁的body內容?
這個也是用到了這個道理。
下載代碼 WebViewDemo
http://veikr.com/201106/android_webview_content-html.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM