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!)

4

3 回答 3

6

我在这个项目上与 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(意思是“我们处理了这个”)将页面添加到历史记录中。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;
        }
    }
}
于 2013-01-15T10:09:07.327 回答
5

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

于 2015-12-30T05:23:13.457 回答
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");
    }

或从此链接获得帮助

于 2013-01-15T08:39:39.300 回答