標籤:
聲明在先:必須在AndroidMainfest.xml 裡面聲明許可權,否則在Java裡面編寫的所有WebView瀏覽網頁的代碼都無法正常使用
<uses-permission android:name="android.permission.INTERNET" />
1.WebView的使用
(a). 建立WebView的執行個體加入到Activity中
WebView webview = new WebView(this); setContentView(webview);
或者在xml中配置WebView
<Webview android:layout_width="match_parent" android:layout_height="match_parent" > </Webview>
(b). 訪問網頁
webview.loadUrl("https://www.baidu.com/");
2.WebView API使用詳解
(a). 請求載入網頁部分
public void loadData (String data, String mimeType, String encoding)
載入指定的data資料
參數說明:
data 字串String形式的資料 可以通過base64編碼而來
mineType data資料的 MIME類型, e.g. ‘text/html‘
encoding data資料的編碼格式
注意:
1.Javascript有同源限制,同源策略限制了一個源中載入文本或者指令碼與來自其他源中的資料互動方式。避免這種限制可以使用loadDataWithBaseURL()方法。
2.encoding參數制定data參數是否為base64或者 URL 編碼,如果data是base64編碼那麼 encoding必須填寫 "base64“。
————————————————————————————————————————————————————
public void loadDataWithBaseURL (String baseUrl, String data, String mimeType, String encoding, String historyUrl)
使用baseUrl載入base URL的網頁內容,baseUrl解決相關url使用Javascript相同源問題。
————————————————————————————————————————————————————
public void loadUrl (String url)
載入制定url的網頁內容
————————————————————————————————————————————————————
public void loadUrl (String url, Map<String, String> additionalHttpHeaders)
載入制定url並攜帶http header資料。
————————————————————————————————————————————————————
public void reload ()
重新載入頁面 注意:頁面所有資源會重新載入
————————————————————————————————————————————————————
public void stopLoading ()
停止載入頁面
(b). 網頁的前進後退
public void goBack () // 頁面後退public void goForward () // 頁面前進 public void goBackOrForward (int steps) // 以當前的index為起始點前進或者後退到記錄中指定的steps, 如果steps為負數則為後退,正數則為前進public boolean canGoForward () // 判斷頁面是否能夠前進public boolean canGoBack () // 判斷頁面是否能夠後退
(c). JavaScript操作
public void addJavascriptInterface (Object object, String name)
當網頁需要和App進行互動時,可以注入Java對象提供給JavaScritp調用. Java對象提供相應的方法供js使用.
注意:在Android 4.2以下使用這個api會涉及到JavaScript安全問題, javascript可以通過反射這個Java對象的相關類進行攻擊。
連結:Android WebView 總結 —— Java和JavaScript互動
連結:Android 4.2版本以下使用WebView組件addJavascriptInterface方法存在JS漏洞
————————————————————————————————————————————————————
public void evaluateJavascript (String script, ValueCallback<String> resultCallback)
這個方法在Android 4.4系統引入,因此只能在Android4.4系統中才能使用,提供在當前頁面顯示上下文中非同步執行javascript代碼
注意: 這個方法必須在UI線程調用,這個函數的回調也會在UI線程執行。那麼在Android4.4一下如何執行javascrit代碼呢?可以通過 WebView提供的loadUrl方法:具體格式如下:
webView.loadUrl("javascript:alert(injectedObject.toString())");
其中javascript: 是執行javascript代碼的標識 , 後面是javascript語句。
————————————————————————————————————————————————————
public void removeJavascriptInterface (String name)
刪除addJavascripInterface時對webview注入的java對象. 此方法在不同的Android系統WebView會有問題,會存在失效情況。
(d). 網頁尋找功能
public void findAllAsync (String find)
非同步執行尋找網頁內包含的字元並設定高亮,尋找結果會回調.
————————————————————————————————————————————————————
public void findNext (boolean forward)
尋找下一個匹配的字元
(e). WebView 事件回調監聽
public void setWebChromeClient (WebChromeClient client)
主要通知用戶端app載入當前網頁的 title,Favicon,progress,javascript dialog等事件,通知用戶端處理這些相應的事件。
————————————————————————————————————————————————————
public void setWebViewClient (WebViewClient client)
主要通知用戶端app載入當前網頁時的各種時機狀態,onPageStart,onPageFinish,onReceiveError等事件。
Android WebView 研發教程