十一長假過來基本處於沒啥事做的情況,所以沒有做一些實際的開發,自己最近也在研究java的後臺,自己寫了一些簡單的接口。好了,廢話不多說。切入正題:
公司最近有個項目是web應用,需要發佈安卓和ios兩個平臺的應用。所以我們安卓的任務量還是很輕的,主要是通過webview加載網頁的url,安卓端需要做一些底層的東西。比如導航,視屏播放,還有第三方分享。
其中webview和js交互可以通過自定義接口和攔截url來實現,具體可以看我的上一篇博客:這裏寫鏈接內容。
但是我在此過程中遇到了一個很奇怪的問題,就是webapp中有一個跳轉url ,跳轉之後發現 html中的一些樣式沒有了,並且某些點擊事件也沒法觸發了。很奇怪,但是這個webapp在網頁端打開和在ios上這些樣式顯示正常,跳轉也是正常。所以我懷疑是安卓端的webview的一些配置問題。找了很久發現加上這句就可以了。
//獲取webview的配置
WebSettings settings = mWebView.getSettings();
//配置支持domstorage
settings.setDomStorageEnabled(true);
但這個配置具體有什麼用了?我們可以看一下源碼:
/**
* Sets whether the DOM storage API is enabled. The default value is false.
*
* @param flag true if the WebView should use the DOM storage API
*/
public synchronized void setDomStorageEnabled(boolean flag) {
throw new MustOverrideException();
}
看了一些感覺像是支持dom 的這個具體我也不清楚,網上搜了也沒說這個是幹啥的。但是就是能解決問題。所以很奇怪。記錄一下,防止以後入坑。
我們平時webView 加載失敗,比如網絡不行了。但是這個時候加載的是默認的頁面比較醜。我們可以自己寫一個。只要重寫onReceivedError()方法就可以了。
webview.setWebViewClient(new MonitorWebClient());
//繼承WebViewClient 重寫方法
public class MonitorWebClient extends WebViewClient {
@Override
public void onReceivedError(WebView view, int errorCode,
String description, String failingUrl) {
// 錯誤<strong>處理</strong>
try {
webview.stopLoading();
} catch (Exception e) {
}
try {
webview.clearView();
} catch (Exception e) {
}
if (webview.canGoBack()) {
webview.goBack();
}
}
@Override
public void onReceivedSslError(WebView view, SslErrorHandler handler,
SslError error) {
// 忽略證書的錯誤繼續Load頁面內容
handler.proceed();
}
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
}
@Override
public void onPageFinished(WebView view, String url) {
}
}
我們webapp沒法監聽我們手機的返回鍵,所以我們得重寫方法:這樣就能實現按下返回鍵返回到上個頁面
@Override
public void onBackPressed() {
//是否能返回
if(webview.canGoBack()){
webview.goBack();
return;
}else{
finish();
}
super.onBackPressed();
}
好了,webview的基本用法已經差不多了。以後有其他新的問題我再補充吧。