如題,我遇到個情況,假如a網頁是電腦端的,在手機上訪問a就會自動跳到b網頁(b適配了手機端),由此導致的webview無法回傳上一頁,會不停的加載a->b這個程序,但是我進行了判斷,如果b網址和我點擊了回傳鍵(回傳鍵使用的是webview.goBack()方法)后的網址相同,就執行webview.goBackOrForward(-2),但是-2竟然多往前跳了一頁,所以最后使用webview.goBackOrForward(-1)正常使用,但是我把點擊回傳鍵的webview.goBack()方法換成webview.goBackOrForward(-1),到了a->b這里還是無法正常回傳
下面是點擊回傳鍵的處理代碼
webView.setOnKeyListener(new View.OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
if (event.getAction() == KeyEvent.ACTION_DOWN) {
//按回傳鍵操作并且能回退網頁
if (keyCode == KeyEvent.KEYCODE_BACK && webView.canGoBack()) {
//后退
/**
* 拿到上一頁的路徑,如果上一頁的路徑==門戶首頁,則直接跳轉至首頁(防止出現無法回傳),否則直接回傳上一頁
* 如果是電腦頁面重加載為手機頁面導致無法回傳,判斷后直接回傳之前的頁面
*/
WebBackForwardList backForwardList = webView.copyBackForwardList();
if (backForwardList != null && backForwardList.getSize() != 0) {
//當前頁面在歷史佇列中的位置
int currentIndex = backForwardList.getCurrentIndex();
WebHistoryItem historyItem = backForwardList.getItemAtIndex(currentIndex - 1);
if (historyItem != null) {
String backPageUrl = historyItem.getUrl();
if (backPageUrl.equals("首頁地址")) {
Log.v("記錄點:", backPageUrl);
webView.loadUrl("首頁地址");
webView.postDelayed(new Runnable()
{
@Override
public void run()
{
webView.clearHistory();
}
}, 1000);
} else {
String f_url = webView.getUrl();
webView.goBack();
String b_url = webView.getUrl();
if(f_url.equals(b_url)){
webView.goBackOrForward(-1);
}
}
}
}
}else{
onBackPressed();//雙擊回傳退出app
}
}
return true;
}
});
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/25592.html
標籤:Android
