我有一个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