web-dev-qa-db-ja.com

ページが読み込まれた後、URLからクエリ文字列を削除するにはどうすればよいですか?

長いクエリ文字列が添付されたURLがあります。ページが読み込まれた後、クエリ文字列は必要ありません。そのため、ページをリロードせずにアドレスバーからクエリ文字列を削除します。

私は試した parent.location.hash = '';およびwindow.location.href = '/#'

彼らは違いをもたらさなかった。

26
Sangam254

ページをリロードせずにそれを行うことはできません。ブラウザのアドレスバーに必要なものを入力できるとしたらどうでしょうか。セキュリティの楽しみ:)

ただし、新しい history API を使用して、HTML5(これをサポートするブラウザでのみ動作します)で実行できるようになりましたが、現実的には、あなたのシナリオはそれを含めるのではなく書き換えを最も適切に保証します(スレッジハンマーがナットをクラックするようです)。

ページの読み込み後にクエリ文字列が不要であると述べたように、reallyポストバックし、処理の完了後に別のURLにリダイレクトする必要があります。

7
mattytommo

他の人が言ったように、最新のブラウザ(IE10 +、FF4 +、Chrome5 +)では History API を使用してこれを行うことができます。答えには完全な例はありませんでしたので、同じことをするための要件が​​あったので、ソリューションを共有すると思いました:

history.pushState(null, "", location.href.split("?")[0]);

Modernizr を使用している場合、History APIが次のように使用可能かどうかも確認できます。

if (Modernizr.history) {
    history.pushState(null, "", location.href.split("?")[0]);
}
36
germankiwi

それは 現代のブラウザhistory api を使用して達成できますが、おそらくあなたの問題に対する最善の解決策ではありません。

history.replaceState({}, 'some title', '/');

データを処理し、HTMLドキュメントを直接返すのではなく、ホームページにリダイレクトする方が良いように思えます。

URLを保持したくないので、ブックマークには役に立たないので、POSTリクエストを作成する方が良いでしょう。

これは、 POST-Redirect-GETパターン を使用する必要があることを示唆しています。

16
Quentin

アドレスバーからクエリ文字列値を削除する

var uri = window.location.toString();
if (uri.indexOf("?") > 0) {
    var clean_uri = uri.substring(0, uri.indexOf("?"));
    window.history.replaceState({}, document.title, clean_uri);
}
3
Fezal halai

history.replaceState({}, "Title", "page.html");を使用します

pushStateと同じ構文。ただし、IEを理解する方法を見つける必要があります。

より良い方法は、Apache mod_rewriteモジュールを使用することです。使い方はとても簡単です。

2
d4rkpr1nc3

私は同じ問題に直面しました。私の解決策はこれらでした:このようなリクエストを取得します:

operation.aspx?opr=lock

このように操作のリダイレクトを完了した後:

Response.Redirect("operation.aspx");

応答で、メッセージがある場合、次のように印刷します。

if (Session["InfoMessages"] != null)
{
    lblMessage.Text = (string)Session["InfoMessages"];
    Session["InfoMessages"] = null;
}

私はそれが他の人を助けることを願っています:)

0
Recev Yildiz

更新されたコードが動作するようになりました

リンクを変更するページに次のコードを追加するだけです。

// javascript function

   function buildLin(first) {
    var firs = first.toString()
       //alert(firs);
       //document.getElementById("team").value = "1";
           document.location.hash = "#" + firs.replace(/ /g, "_");
        //alert(document.location.hash);
    }

 //jQuery to call above function after page loads

  $(document).ready(function () {
      buildLin(2);
  });

ページに http://code.jquery.com/jquery-latest.js を追加することを忘れないでください

0
Code Spy

特に$routeProviderを使用している人のために、これを行う方法をもう1つ追加します。

他のいくつかの回答で言及されているように、これを行うには次を使用します。

var yourCurrentUrl = window.location.href.split('?')[0]; 
window.history.replaceState({}, '', yourCurrentUrl ); 

または、履歴スタックに新しいレコードを作成します。

window.history.pushState({}, '', yourCurrentUrl );  

history.pushStateおよびhistory.replaceStateの使用に関する非常に詳細で素晴らしい説明については、 SOのこの投稿 を読むことができます。

ただし、アプリでAngular$routeProviderを使用している場合、既存のパターンと一致する場合はこの変更をキャプチャします。これを避けるには、$routeProviderreloadOnSearch フラグがfalseに設定されていることを確認してください。デフォルトではtrueです。

例えば:

$routeProvider.when("/path/to/my/route",{
   controller: 'MyController',
   templateUrl: '/path/to/template.html',
   //Secret Sauce
   reloadOnSearch: false//Make sure this is explicitly set to false
});
0
curiousBoy

リロードせずにURLパラメータを削除する必要がある個人プロジェクトでこのコードスニペットを使用します。

var newURL = location.href.split("?")[0];
window.history.pushState('object', document.title, newURL);
0
ChristianG