2

を使用して、別のページにリダイレクトするページを持つ 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 を変更すべきではありません!)

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;
        }
    }
}

問題は、 に URL を読み込むように明示的に指示し、WebViewClienttrue を返す (「これを処理した」ことを意味する) ことで、ページが履歴に追加されることでした。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 に答える