を使用して、別のページにリダイレクトするページを持つ Android webview がありますlocation.replace(url)
。
ページ「B」にリダイレクトするページ「A」があるとします (location.replace を使用)。ページ「B」から「戻る」ボタンを押すと、ページはページ「A」に戻り、ページ「B」に再びリダイレクトされます。履歴 API (history.length) をデバッグすると、ページ "B" で長さが "1" 増加したことがはっきりとわかります (Android 4.X webview のみ。iOS / Web ブラウザー / Android 2.X ではこれはバグです。(location.replace は history.length を変更すべきではありません!)
質問する
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;
}
}
}
問題は、 に URL を読み込むように明示的に指示し、WebViewClient
true を返す (「これを処理した」ことを意味する) ことで、ページが履歴に追加されることでした。WebView は通常の 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 に答える