Android WebView的詳解及實(shí)例
Android WebView的詳解
Android WebView在android平臺(tái)上是一個(gè)特殊的View, 他能用來(lái)顯示網(wǎng)頁(yè),這個(gè)類可以被用來(lái)在你的app中僅僅顯示一張?jiān)诰€的網(wǎng)頁(yè),還可以用來(lái)開發(fā)瀏覽器。
在Android手機(jī)中內(nèi)置了一款高性能webkit內(nèi)核瀏覽器,在SDK中封裝為一個(gè)叫做WebView組件。WebKit是Mac OS X v10.3及以上版本所包含的軟件框 架(對(duì)v10.2.7及以上版本也可通過(guò)軟件更新獲取)。 同時(shí),WebKit也是Mac OS X的Safari網(wǎng)頁(yè)瀏覽器的基礎(chǔ)。WebKit是一個(gè)開源項(xiàng)目,主要由KDE的KHTML修改而來(lái)并且包含了一些來(lái)自蘋果公司的一些組件。傳統(tǒng)上,WebKit包含一個(gè)網(wǎng)頁(yè)引擎WebCore和一個(gè)腳本引擎JavaScriptCore,它們分別對(duì)應(yīng)的是KDE的KHTML和KJS。不過(guò), 隨著JavaScript引擎的獨(dú)立性越來(lái)越強(qiáng),現(xiàn)在WebKit和WebCore已經(jīng)基本上混用不分(例如Google Chrome和Maxthon 3采用V8引擎,卻仍然宣稱自己是WebKit內(nèi)核)。
在開發(fā)過(guò)程中應(yīng)該注意幾點(diǎn):
1.AndroidManifest.xml中必須使用許可"android.permission.INTERNET",否則會(huì)出Web page not available錯(cuò)誤。
2.如果訪問的頁(yè)面中有javascript,則webview必須設(shè)置支持Javascript。
webview.getSettings().setJavaScriptEnabled(true);
3.如果頁(yè)面中鏈接,如果希望點(diǎn)擊鏈接繼續(xù)在當(dāng)前browser中響應(yīng),而不是新開Android的系統(tǒng)browser中響應(yīng)該鏈接,必須覆蓋 webview的WebViewClient對(duì)象
webView.setWebViewClient(new WebViewClient() { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { // TODO Auto-generated method stub view.loadUrl(url); return true; } } );
4.如果不做任何處理,瀏覽網(wǎng)頁(yè),點(diǎn)擊系統(tǒng)“Back”鍵,整個(gè)Browser會(huì)調(diào)用finish()而結(jié)束自身,如果希望瀏覽的網(wǎng) 頁(yè)回退而不是推出瀏覽器,需要在當(dāng)前Activity中處理并消費(fèi)掉該Back事件。
@Override public boolean onKeyDown(int keyCode, KeyEvent event) { // TODO Auto-generated method stub if ((keyCode == KeyEvent.KEYCODE_BACK) && webView.canGoBack()) { webView.goBack(); return true; } return super.onKeyDown(keyCode, event); }
下一步讓我們來(lái)了解一下android中webview是如何支持javascript自定義對(duì)象的,在w3c標(biāo)準(zhǔn)中js有 window,history,document等標(biāo)準(zhǔn)對(duì)象,同樣我們可以在開發(fā)瀏覽器時(shí)自己定義我們的對(duì)象調(diào)用手機(jī)系統(tǒng)功能來(lái)處理,這樣使用js就可以 為所欲為了。
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>WebView</title> <script language="javascript"> <!-- function click() { Android.onClick("hello"); } --> </script> </head> <body> <a rel="external nofollow" onclick="click()">點(diǎn)擊</a> </body> </html>
可以看到,HTML代碼中的超鏈接響應(yīng)一個(gè)點(diǎn)擊事件,會(huì)執(zhí)行javascript中的click()方法,因?yàn)橥ㄟ^(guò)webView.addJavascriptInterface()方法新建了一個(gè)對(duì)象,并將此對(duì)象和javascript對(duì)象綁定了,javascript對(duì)象的引用即為"Android",所以在HTML中的click方法執(zhí)行時(shí)會(huì)調(diào)用新建的對(duì)象中的onClick()方法。這樣就實(shí)現(xiàn)了在javascript代碼中調(diào)用Java代碼.
感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!
相關(guān)文章
Android學(xué)習(xí)項(xiàng)目之簡(jiǎn)易版微信為例(一)
這篇文章主要以簡(jiǎn)易版微信為例,為大家介紹了Android簡(jiǎn)易版微信項(xiàng)目的基礎(chǔ)知識(shí),感興趣的小伙伴們可以參考一下2016-06-06Android仿微信Viewpager-Fragment惰性加載(lazy-loading)
這篇文章主要為大家詳細(xì)介紹了Android仿微信Viewpager-Fragment惰性加載lazy-loading,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-08-08Android編程實(shí)現(xiàn)加載等待ProgressDialog的方法
這篇文章主要介紹了Android編程實(shí)現(xiàn)加載等待ProgressDialog的方法,實(shí)例分析了Android中加載等待類ProgressDialog的具體使用方法,需要的朋友可以參考下2015-12-12Android中毛玻璃效果的兩種實(shí)現(xiàn)代碼
這篇文章主要介紹了Android中毛玻璃效果的兩種實(shí)現(xiàn)代碼,第一種是使用JAVA算法FastBlur實(shí)現(xiàn),第二種是使用Android自帶類RenderScript 實(shí)現(xiàn),本文通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友參考下吧2024-08-08Android RecyclerView的刷新分頁(yè)的實(shí)現(xiàn)
這篇文章主要介紹了Android RecyclerView的刷新分頁(yè)的實(shí)現(xiàn),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-05-05Android在kts中使用navigation及Args的方法
在Android項(xiàng)目中使用Kotlin腳本(kts)替代Groovy配置navigation和Args,需添加相關(guān)依賴,并在build.gradle中進(jìn)行配置,文章詳細(xì)介紹了如何在kts中使用navigation進(jìn)行頁(yè)面導(dǎo)航和參數(shù)傳遞,介紹了使用Bundle和Safe Args兩種方式安全傳遞參數(shù)2024-10-10老項(xiàng)目遷移AndroidStudio3.0遇到的坑
給大家分享了老的項(xiàng)目以及程序遷移到了AndroidStudio3.0遇到的坑和問題解決辦法,希望給你做個(gè)參考。2017-11-11Android自定義View實(shí)現(xiàn)拖動(dòng)選擇按鈕
這篇文章主要為大家詳細(xì)介紹了Android自定義View實(shí)現(xiàn)拖動(dòng)選擇按鈕的具體代碼,感興趣的小伙伴們可以參考一下2016-05-05Android監(jiān)聽電池狀態(tài)實(shí)例代碼
這篇文章給大家介紹Android監(jiān)聽電池狀態(tài)實(shí)例代碼,對(duì)android監(jiān)聽電池狀態(tài)相關(guān)知識(shí)感興趣的朋友一起學(xué)習(xí)吧2016-03-03