亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > Android > 正文

Android開發筆記之探秘WebView

2020-04-11 11:46:57
字體:
來源:轉載
供稿:網友

概述:
           一個顯示網頁的視圖。這個類是你可以滾動自己的Web瀏覽器或在你的Activity中簡單地顯示一些在線內容的基礎。它使用了WebKit渲染引擎來顯示網頁,包括向前和向后導航的方法(通過歷史記錄),放大和縮小,執行文本搜索等。

         需要注意的是:為了讓你的應用能夠使用WebView訪問互聯網和加載網頁,你必須添加Internet的權限在Android Manifest文件中:

<uses-permission android:name="android.permission.INTERNET" /> 

類結構:

java.lang.Object  ↳ android.view.View   ↳ android.view.ViewGroup     ↳ android.widget.AbsoluteLayout      ↳ android.webkit.WebView

常用方法:

WebSettings
getSettings()
獲取設置WebView的WebSettings對象。
void
setWebViewClient(WebViewClient client)
設置將接收各種通知和請求的WebViewClient。
void
setWebChromeClient(WebChromeClient client)
設置chrome處理。

說明:

WebSettings  getSettings()獲取設置WebView的WebSettings對象。

WebSettings常用方法:

 

方法
說明
setAllowFileAccess
啟用或禁用WebView訪問文件數據
setBlockNetworkImage
是否顯示網絡圖像
setBuiltInZoomControls
設置是否支持縮放
setCacheMode
設置緩沖的模式
setDefaultFontSize
設置默認的字體大小
setDefaultTextEncodingName
設置在解碼時時候用的默認編碼
setFixedFontFamily
設置固定使用的字體
setJavaScriptEnabled
設置是否支持Javascript
setLayoutAlgorithm
設置布局方式
setLightTouchEnabled
設置用鼠標激活被選項
setSupportZoom
設置是否支持變焦

void  setWebViewClient(WebViewClient client)

設置將接收各種通知和請求的WebViewClient。

WebViewClient 常用方法:

 

方法
說明
doUpdateVisitedHistory
更新歷史記錄
onFormResubmission
應用程序重新請求網頁數據
onLoadResource
加載指定地址提供的資源
onPageFinished
網頁加載完畢
onPageStarted
網頁開始加載
onReceivedError
報告錯誤信息
onScaleChanged
WebView發生改變
shouldOverrideUrlLoading
控制新的連接在當前WebView中打開

void  setWebChromeClient(WebChromeClient client) 設置chrome處理。

WebChromeClient常用方法:

 

方法
說明
onCloseWindow
關閉WebView
onCreateWindow
創建WebView
onJsAlert
處理Javascript中的Alert對話框
onJsConfirm
處理Javascript中的Confirm對話框
onJsPrompt
處理Javascript中的Prompt對話框
onProgressChanged
加載進度條改變
onReceivedlcon
網頁圖標更改
onReceivedTitle
網頁Title更改
onRequestFocus WebView
顯示焦點

 自定義WebView,你可以添加你自己的行為:
創建和設置WebChromeClient子類。當一些可能影響瀏覽器的用戶界面發生了,例如,進度更新和JavaScript警報送到這里(見調試任務)調用這個類。
創建和設置WebViewClient子類。當影響內容呈現的事情發生是調用這個類,例如,錯誤或表單提交。您也可以攔截的URL加載到這里(通過shouldOverrideUrlLoading())。
修改WebSettings,如以setJavaScriptEnabled()方式啟用JavaScript。
將Java對象通過addJavascriptInterface(Object,String)方法注射到WebView。 這方法允許您將Java對象注入到一個頁面的JavaScript上下文,這樣他們可以通過JavaScript訪問的頁面。
下面是一個更加復雜的例子,顯示錯誤處理,設置和進展通知:

// Let's display the progress in the activity title bar, like the // browser appdoes. getWindow().requestFeature(Window.FEATURE_PROGRESS); webview.getSettings().setJavaScriptEnabled(true); final Activity activity = this; webview.setWebChromeClient(new WebChromeClient() {  public void onProgressChanged(WebView view, int progress) {   //Activities and WebViews measure progress with different scales.   //The progress meter will automatically disappear when we reach 100%   activity.setProgress(progress * 1000);  } }); webview.setWebViewClient(new WebViewClient() {  public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {   Toast.makeText(activity, "Oh no! " + description, Toast.LENGTH_SHORT).show();  } }); webview.loadUrl("http://developer.android.com/");  

縮放:
        可以通過 設置 WebSettings.setBuiltInZoomControls(boolean) ,啟用內置縮放。

注意:使用縮放,如果不是高度或寬度設置為WRAP_CONTENT可能會導致不確定的行為,應該避免。

Cookie 和窗口管理:
        出于顯而易見的安全原因,您的應用程序都有自己的緩存,cookie存儲等,它不共享瀏覽器應用程序的數據。

默認情況下,通過HTML請求打開新的窗口將被忽略。這是確切的它們是被JavaScript打開還是被目標鏈接打開。您可以自定義您的WebChromeClient提供自己的行為打開多個窗口,并使用你想要的任何方式渲染它們。

WebView中構建Web應用程序:      
      如果你想提供一個Web應用程序(或只是一個網頁)作為客戶端應用程序的一部分,你可以使用WebView做到這一點。WebView類是Android的View類的一個擴展,它可以讓你顯示網頁作為你的活動布局的一部分。它不包括一個完全開發的Web瀏覽器的任何功能,如導航控件或一個地址欄。所有的WebView默認情況下是顯示一個Web頁面。

     一個使用WebView的常見的場景:是當你想要在你的應用程序中提供可能需要更新的信息,如一個終端用戶協議或用戶指南,那么使用WebView是很有幫助的。 在你的Android應用程序中你可以創建一個包含WebView的Activity然后用它來顯示的在線托管的文檔。

    另一個使用WebView的常見的場景:是如果你的應用程序提供的數據總是需要從Internet上獲取,如電子郵件。在這種情況下,你可能會發現它更容易在你的Android應用程序,顯示所有的用戶數據的網頁,而不是執行一個網絡請求,然后解析​​數據,并渲染它在Android的布局,以建立一個WebView。相反,你可以設計的專為Android設備的網頁,然后實施的WebView在你的Android應用程序加載的網頁。

下面將向你展示如何開始使用WebView,以及如何做一些額外的事情,比如在你的Android應用程序中處理頁面導航和從網頁上綁定JavaScript到客戶端的代碼。

基本用法:
       默認情況下,WebView不提供類似瀏覽器的窗口小部件,不啟用JavaScript和網頁錯誤被忽略。如果你的目的只是顯示一些HTML作為用戶界面的一部分,這也許還不錯;用戶將不再需要與網頁進行交互閱讀,并且該網頁將不需要與用戶進行交互。如果你需要一個全面的Web瀏覽器,那么你可能要調用瀏覽器應用程序來加載URL,而不是用WebView中顯示它。例如:

1)        在你的APP中添加一個WebView:

<?xml version="1.0" encoding="utf-8"?> <WebView xmlns:android="http://schemas.android.com/apk/res/android"   android:id="@+id/webview"   android:layout_width="fill_parent"   android:layout_height="fill_parent" /> 

2)        使用loadUrl()方法加載一個web頁面:

WebView myWebView = (WebView) findViewById(R.id.webview); myWebView.loadUrl("http://www.example.com"); 

3)        給應用程序添加訪問網絡的權限:

<manifest ... >   <uses-permission android:name="android.permission.INTERNET" />  </manifest> 

以上就是顯示一個最基本的web頁面所有的步驟。
在WebView中使用JavaScript :
       如果你計劃在你的WebView加載網頁時使用JavaScript,你必須為你的WebView啟用JavaScript。一旦啟用JavaScript,你還可以創建你的應用程序代碼和JavaScript代碼之間的接口。

JavaScript在WebView中默認情況下是被禁用的。你可以通過附加在WebView上的WebSettings啟用它。即使用getSettings()獲取WebSettings       ,然后啟用使用setJavaScriptEnabled()方法啟用JavaScript。


 

WebView myWebView = (WebView) findViewById(R.id.webview); WebSettings webSettings = myWebView.getSettings(); webSettings.setJavaScriptEnabled(true); 
 

JavaScript代碼綁定到Android代碼:
        在開發一個web應用程序,專門設計的WebView在你的Android應用程序中,您可以創建您的JavaScript代碼和客戶端Android代碼之間的接口。例如,您的JavaScript代碼可以在你的Android代碼中調用一個方法來顯示Dialog,而不是使用JavaScriptalert()方法。

       調用addJavascriptInterface()方法綁定一個新的JavaScript和Android代碼之間的接口。通過它 一個類實例綁定到你的JavaScrip,JavaScript可以調用一個接口名稱訪問類。

public class WebAppInterface {   Context mContext;   /** Instantiatethe interface and set the context */   WebAppInterface(Context c) {     mContext = c;   }   /** Show a toastfrom the web page */   @JavascriptInterface   public void showToast(String toast) {     Toast.makeText(mContext, toast, Toast.LENGTH_SHORT).show();   } } 

注意:如果你設置的targetSdkVersion為17或更高,則必須添加@JavascriptInterface為任何您想要提供給您的JavaScript(該方法必須是public)方法添加標注。如果你不提供注解,在Android4.2或更高版本上運行時該方法是不能被網頁訪問的。
       在上面這個例子中,WebAppInterface 類允許網頁調用showToast()方法創建一個Toast 消息。

      你可以通過addJavascriptInterface()方法和Android接口名,綁定這個類到運行在你的WebView中的JavaScript上。

WebView webView = (WebView) findViewById(R.id.webview); webView.addJavascriptInterface(new WebAppInterface(this), "Android"); 

 

         這將為運行在WebView中的JavaScript創建一個名為Android的接口。在這一點上,Web應用程序可以訪問WebAppInterface類。例如,下面是一些HTML和JavaScript在單擊按鈕的時候將創建一個Toast消息。

<input type="button" value="Sayhello" onClick="showAndroidToast('Hello Android!')" /> <script type="text/javascript">   function showAndroidToast(toast) {     Android.showToast(toast);   } </script> 

這不需要從JavaScript接口初始化Android。 WebView自動的將它應用到你的web頁面中。 因此,按下按鈕showAndroidToast()方法使用Android接口調用WebAppInterface.showToast()方法。
注:綁定到你的JavaScript對象運行在另一個線程,而不是在它構建的線程。

警告:使用addJavascriptInterface()將允許 JavaScript來控制你的Android應用程序。 這是一個非常有用的特性或危險的安全問題。 當WebView的HTML是不值得信任的(例如,部分或全部的HTML是由一個不知名的人或進程提供的),那么攻擊將者執行包括在HTML和選擇的任何客戶端代碼。因此,不應該使用addJavascriptInterface()除非你寫的所有HTML和JavaScript出現在你WebView。 你應該也不允許用戶導航到其他不是自己的網頁,,在你的WebView內(相反,允許用戶的通過默認瀏覽器應用程序打開外部鏈接。應用的web瀏覽器打開所有的URL鏈接,所以要小心你只有在處理頁面導航中描述以下部分)。

處理頁面導航:
      當用戶單擊在WebView上的鏈接時,默認行為是啟動一個處理URL的Android應用。通常默認網頁瀏覽器打開和裝在目的URL。但是你可以為WebView覆蓋這個行為,以便在你的WebView上打開鏈接。然后,您可以允許用戶前后瀏覽通過的由您的WebView保留的網頁歷史記錄。

要打開用戶點擊鏈接,只是提供一個WebViewClient為您的WebView,使用setWebViewClient()。

WebView myWebView = (WebView) findViewById(R.id.webview); myWebView.setWebViewClient(new WebViewClient()); 

這樣。用戶點擊的所有的鏈接,都在你的WebView上加載。
如果你想更多的控制點擊鏈接的加載,創建自己的WebViewClient的覆蓋shouldOverrideUrlLoading()方法。

private class MyWebViewClient extends WebViewClient {   @Override   public boolean shouldOverrideUrlLoading(WebView view, String url) {     if (Uri.parse(url).getHost().equals("www.example.com")) {       // This is my web site, so do not override;let my WebView load the page       return false;     }     // Otherwise, the link is not for a page on my site, so launch anotherActivity that handles URLs     Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));     startActivity(intent);     return true;   } } 

然后為WebView創建一個新的WebViewClient實例:

WebView myWebView = (WebView) findViewById(R.id.webview); myWebView.setWebViewClient(new MyWebViewClient()); 

      現在,當用戶點擊一個鏈接時,系統調用shouldOverrideUrlLoading(),它會檢查URL主機是否一個特定的域相匹配(定義如上)。如果不匹配,那么為了不重寫的URL加載(它允許WebView加載的URL照常)方法返回false。如果URL中的主機不匹配,那么 一個Intent將被創建啟動默認的Activity 處理URL(它可以解決用戶的默認Web瀏覽器)。
瀏覽網頁的歷史記錄:
     當你的WebView重載URL加載的時,WebView會自動累加訪問過的網頁的歷史記錄。您可以通過goBack()和 goForward()方法向后、向前瀏覽。

@Override public boolean onKeyDown(int keyCode, KeyEvent event) {   // Check if thekey event was the Back button and if there's history   if ((keyCode == KeyEvent.KEYCODE_BACK) && myWebView.canGoBack()) {     myWebView.goBack();     return true;   }   // If it wasn'tthe Back key or there's no web page history, bubble up to the default   // systembehavior (probably exit the activity)   return super.onKeyDown(keyCode, event); } 

     如果有一個實際的網頁歷史記錄用戶訪問的canGoBack()方法返回true。同樣地,你可以使用canGoForward()來檢查是否有歷史前進。如果不執行此檢查,那么一旦用戶到達歷史的終結,GoBack()或goForward()什么也不做。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日本午夜精品理论片a级appf发布| 91九色综合久久| 日韩电影视频免费| 亚洲久久久久久久久久久| 久久精品成人一区二区三区| 国产精品∨欧美精品v日韩精品| 不卡av日日日| 欧美做受高潮电影o| 最近中文字幕日韩精品| 在线丨暗呦小u女国产精品| 热re91久久精品国99热蜜臀| 欧美在线亚洲在线| 欧美在线影院在线视频| 亚洲毛片在线免费观看| 国产视频观看一区| 久久夜精品va视频免费观看| 国产欧美日韩最新| 国产亚洲精品高潮| 欧美日韩在线免费| 国产精品白丝jk喷水视频一区| 青青草一区二区| 亚洲色图校园春色| 国产精品成人av在线| 久久久久国产精品www| 久久久亚洲国产天美传媒修理工| 最新国产成人av网站网址麻豆| 青草青草久热精品视频在线观看| 国产日韩一区在线| 国产成人精品久久二区二区| www高清在线视频日韩欧美| 久久九九热免费视频| 成人乱色短篇合集| 日韩av理论片| 日韩精品在线看| 欧美成人免费播放| 国产精品h片在线播放| 777777777亚洲妇女| 97在线看免费观看视频在线观看| 欧美精品在线免费播放| 精品在线观看国产| 国产福利成人在线| 日本欧美爱爱爱| 欧美电影免费观看电视剧大全| 91综合免费在线| 久久久人成影片一区二区三区| 久久99精品视频一区97| 国产日韩视频在线观看| 97免费视频在线播放| 国语自产精品视频在线看抢先版图片| 亚洲福利在线播放| 欧美激情在线观看| 国产精品久久久久久久一区探花| 26uuu亚洲国产精品| 日韩在线观看免费高清完整版| 精品毛片三在线观看| 欧美激情图片区| 精品一区二区电影| 俺也去精品视频在线观看| 亚洲免费视频一区二区| 欧美黑人xxx| 欧美日韩国产中字| 日韩中文在线中文网在线观看| 亚洲欧美另类在线观看| 久久躁狠狠躁夜夜爽| 国产精品色婷婷视频| 亚洲一区二区免费在线| 国产成人综合久久| 91国内揄拍国内精品对白| 98视频在线噜噜噜国产| 国产成人一区三区| 日本人成精品视频在线| 国产乱肥老妇国产一区二| 永久免费毛片在线播放不卡| 日韩有码在线视频| 亚洲国产婷婷香蕉久久久久久| 在线电影av不卡网址| 国产福利成人在线| 国产女人18毛片水18精品| 日韩av免费观影| 97色伦亚洲国产| 黑人欧美xxxx| 6080yy精品一区二区三区| 久久久精品2019中文字幕神马| 欧美成人免费视频| 亚洲成人网久久久| 欧美日韩国产综合视频在线观看中文| 日韩免费视频在线观看| 亚洲男人天堂网站| 欧美大片免费观看在线观看网站推荐| 国产精品自拍视频| 尤物yw午夜国产精品视频明星| 亚洲女人天堂成人av在线| 欧美一区深夜视频| 亚洲老板91色精品久久| 日韩av最新在线观看| 久久婷婷国产麻豆91天堂| 欧美激情极品视频| 国产97在线亚洲| 国产成人激情小视频| 久久久97精品| 欧美另类极品videosbestfree| 精品免费在线视频| 亚洲精品电影网站| 国产女人精品视频| 日韩www在线| 黄色一区二区在线观看| 一本久久综合亚洲鲁鲁| 精品欧美国产一区二区三区| 欧美一级视频一区二区| 亚洲精品动漫100p| 亚洲人成网7777777国产| 久久亚洲精品国产亚洲老地址| 久久激情视频久久| 亚洲直播在线一区| 国产成人免费av| 亚洲人成欧美中文字幕| 久久精品国产一区二区三区| 视频一区视频二区国产精品| 国产精品va在线播放我和闺蜜| 丝袜情趣国产精品| 欧美精品免费在线| 91免费国产视频| 日韩视频在线一区| 成人h片在线播放免费网站| 一二美女精品欧洲| 欧美成人精品h版在线观看| 国产69精品久久久| 国内精久久久久久久久久人| 社区色欧美激情 | 色噜噜久久综合伊人一本| 日本电影亚洲天堂| 久久亚洲综合国产精品99麻豆精品福利| 俺也去精品视频在线观看| 欧美精品久久久久久久久| 欧美日韩国产精品一区二区不卡中文| 一区二区三区视频免费在线观看| 成人在线激情视频| 国产亚洲精品日韩| 久久这里只有精品视频首页| 日韩的一区二区| 性色av一区二区三区免费| 欧美专区在线播放| 中文字幕在线视频日韩| 亚洲一区二区在线| 欧美另类暴力丝袜| 亚洲人成毛片在线播放| 日韩在线一区二区三区免费视频| 亚洲福利在线看| 亚洲乱码一区av黑人高潮| 欧美日韩国产精品专区| 日韩av电影手机在线观看| 久久伊人色综合| 日韩亚洲欧美中文高清在线| 久久精品影视伊人网| 久久久人成影片一区二区三区| 亚洲午夜未满十八勿入免费观看全集| 午夜精品久久久久久久男人的天堂| 中文字幕亚洲情99在线| 97av在线视频免费播放| 国产精品久久久久久久久久免费| 精品久久久免费| 亚洲欧美国产高清va在线播| 成人av在线网址| 91夜夜未满十八勿入爽爽影院|