Android的web视图“location.replace”不工作(Android webview

2019-07-18 05:35发布

我有一个Android的WebView与重定向到另一个页面一个页面,使用location.replace(url)
比方说,我有一个重定向到页面“B”(使用location.replace)页面“A”。 当按下从页面“B”,“后退”按钮,页面返回页面“A”,它再次重定向到页面“B”。 当我调试的历史API(history.length),我可以清楚地看到,在页面的“B”的长度已增加“1”(仅适用于Android 4.X的WebView。在iOS / Web浏览器/安卓2.X它保持不变),这是一个错误! (location.replace不应该改变history.lenght!)

Answer 1:

我在一个项目上的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;
        }
    }
}

问题是,明确地告诉WebViewClient加载URL和返回true(意思是“我们处理这”)的添加页面的历史。 网页视图完全有能力通过自己的处理规则的网址,所以返回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;
        }
    }
}


Answer 2:

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



Answer 3:

试试这个方式..

 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");
    }

或者得到帮助这个和这个链接



文章来源: Android webview “location.replace” doesn't work