我有一个带有重定向到另一个页面的页面的 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!)
问问题
7657 次
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 回答