記自己遇到的一些WebView坑
1. 坑1
這個bug遇到的時候不是必現。
WebView加載時設定了這樣的語句會加載白頁:
例如:
webView.loadData("", "text/html", "uft-8");
//...<other code>...
webView1.loadUrl(url);
//...<other code>...
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.iv_goback:
if (webView.canGoBack()) {//此時此處canGoBack()有一定幾率為true 導緻傳回為白頁
webView.goBack();//傳回上一浏覽頁面
} else {
finish();//關閉Activity
}
}
}
我的配置代碼
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_html5_bottom_bar);
mProgressBar = (ProgressBar) findViewById(R.id.progressBar);
mProgressBar.setMax();
}
private void requestData(String url) {
WebSettings webSettings = webView.getSettings();
webSettings.setDefaultTextEncodingName("utf-8");
webSettings.setRenderPriority(WebSettings.RenderPriority.HIGH);
webSettings.setCacheMode(WebSettings.LOAD_NO_CACHE);//不使用緩存
webView.setWebChromeClient(new MyChromeClient());
webSettings.setBuiltInZoomControls(false); // 放大縮放按鈕
// 如果通路的頁面中有JavaScript,則WebView必須設定支援JavaScript
webSettings.setJavaScriptEnabled(true);
//JS互動
webView.addJavascriptInterface(new JsInteration(), "control");
// 設定可以支援縮放
webSettings.setSupportZoom(true);
// 擴大比例的縮放
webSettings.setUseWideViewPort(true);
webSettings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN);
webSettings.setLoadWithOverviewMode(true);
webView.setWebViewClient(new WebViewClient() {
public boolean shouldOverrideUrlLoading(WebView view, String url) { // 重寫此方法表明點選網頁裡面的連結還是在目前的webview裡跳轉,不跳到浏覽器那邊
view.loadUrl(url);
return true;
}
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
super.onPageStarted(view, url, favicon);
isShowFail = false;
}
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
if (!isShowFail) {
customview.showLoadStateView(CustomView.STATE_NONE);
}
}
@Override
public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
super.onReceivedError(view, errorCode, description, failingUrl);
isShowFail = true;
customview.showLoadStateView(CustomView.STATE_ERROR);// 加載失敗時顯示的失敗界面
}
});
webView.loadUrl(url);
}
//與JS互動的對象
public class JsInteration {
@JavascriptInterface
public void gotoGoodInfo(String id){
//doSomething
}
}
// 設定加載進度
public class MyChromeClient extends android.webkit.WebChromeClient {
@Override
public void onProgressChanged(WebView view, int newProgress) {
mProgressBar.setProgress(newProgress);
if (newProgress == ) {
mProgressBar.setVisibility(View.GONE);
} else {
mProgressBar.setVisibility(View.VISIBLE);
}
super.onProgressChanged(view, newProgress);
}
@Override
public void onReceivedTitle(WebView view, String title) {
//擷取加載的url的标題
super.onReceivedTitle(view, title);
}
}
陸續更新,部落格新人歡迎評論╮( ̄▽ ̄”)╭