我有一个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!)
答案 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");
}
获取帮助