2013-01-15 26 views
2

我有一個Android網頁瀏覽器,使用location.replace(url)重定向到另一個頁面。
可以說我有頁面「A」重定向到頁面「B」(使用location.replace)。當從頁面「B」按下「返回」按鈕時,頁面返回到頁面「A」,該頁面再次將其重定向到頁面「B」。 當我調試歷史api(history.length)時,我可以清楚地看到在頁面「B」上的長度增加了「1」(僅適用於Android 4.X webview。在iOS/web瀏覽器/ Android 2.X它仍然是一樣的),這是一個錯誤! (location.replace不應該改變history.lenght!)Android的網絡視圖「location.replace」不起作用

回答

4

我的Yaniv在這個項目上,我們找到問題的原因,它是在我們嘗試添加mailto:根據this answer處理的鏈接時引入的。

答案使用下面的擴展類WebViewClient的建議:

public class MyWebViewClient extends WebViewClient { 
    @Override 
    public boolean shouldOverrideUrlLoading(WebView view, String url) {  
     if(MailTo.isMailTo(url)){ 
      MailTo mt = MailTo.parse(url); 
      // build intent and start new activity 
      return true; 
     } 
     else { 
      view.loadUrl(url); 
      return true; 
     } 
    } 
} 

的問題是明確告訴WebViewClient加載URL和返回true(意思是「我們處理這個」)的添加頁面到歷史。 WebViews能夠自行處理常規URL,因此返回false並且不觸及視圖實例將使WebView加載頁面並按照它應該處理它。

所以:

public class MyWebViewClient extends WebViewClient { 
    @Override 
    public boolean shouldOverrideUrlLoading(WebView view, String url) {  
     if(MailTo.isMailTo(url)){ 
      MailTo mt = MailTo.parse(url); 
      // build intent and start new activity 
      return true; 
     } 
     else { 
      return false; 
     } 
    } 
} 
0

嘗試這種方式..

public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     WebView mainWebView = (WebView) findViewById(R.id.webView1); 

     WebSettings webSettings = mainWebView.getSettings(); 
     webSettings.setJavaScriptEnabled(true); 

     mainWebView.setWebViewClient(new MyCustomWebViewClient()); 
     mainWebView.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY); 

     mainWebView.loadUrl("file:///android_asset/www/A.html"); 
    } 

或者從thisthis聯繫獲得幫助

1

function locationReplace(url){ 
 
    if(history.replaceState){ 
 
    history.replaceState(null, document.title, url); 
 
    history.go(0); 
 
    }else{ 
 
    location.replace(url); 
 
    } 
 
}