Android webview"location.replace"不起作用

Yan*_*aim 2 javascript android android-webview html5-history

我有一个Android webview,其页面重定向到另一个页面,使用location.replace(url).
让我们说我有页面"A"重定向到页面"B"(使用location.replace).当从页面"B"按下"后退"按钮时,页面返回页面"A",再次将其重定向到页面"B".当我调试历史api(history.length)时,我可以清楚地看到页面"B"的长度增加了"1"(仅在Android 4.X webview上.在iOS /网络浏览器/ Android 2.X上保持不变),这是一个错误!(location.replace不应该改变history.lenght!)

Dan*_*iel 5

我在这个项目上和Yaniv合作,我们找到了问题的原因,当我们尝试mailto:根据这个答案添加链接处理时引入了它.

答案建议使用以下扩展类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;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

问题是明确告诉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;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)


小智 5

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