Android webview“location.replace”不起作用

时间:2013-01-15 08:21:10

标签: javascript android android-webview html5-history

我有一个Android网页视图,其中的网页使用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!)

3 个答案:

答案 0 :(得分:5)

我在这个项目上与Yaniv合作,我们找到了问题的原因,当我们尝试根据this answer添加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;
        }
    }
}

问题是明确告诉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;
        }
    }
}

答案 1 :(得分:2)

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

答案 2 :(得分: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链接

获取帮助