長いクエリ文字列が添付されたURLがあります。ページが読み込まれた後、クエリ文字列は必要ありません。そのため、ページをリロードせずにアドレスバーからクエリ文字列を削除します。
私は試した parent.location.hash = '';
およびwindow.location.href = '/#'
彼らは違いをもたらさなかった。
ページをリロードせずにそれを行うことはできません。ブラウザのアドレスバーに必要なものを入力できるとしたらどうでしょうか。セキュリティの楽しみ:)
ただし、新しい history API を使用して、HTML5(これをサポートするブラウザでのみ動作します)で実行できるようになりましたが、現実的には、あなたのシナリオはそれを含めるのではなく書き換えを最も適切に保証します(スレッジハンマーがナットをクラックするようです)。
ページの読み込み後にクエリ文字列が不要であると述べたように、reallyポストバックし、処理の完了後に別のURLにリダイレクトする必要があります。
他の人が言ったように、最新のブラウザ(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]);
}
それは 現代のブラウザ で history api を使用して達成できますが、おそらくあなたの問題に対する最善の解決策ではありません。
history.replaceState({}, 'some title', '/');
データを処理し、HTMLドキュメントを直接返すのではなく、ホームページにリダイレクトする方が良いように思えます。
URLを保持したくないので、ブックマークには役に立たないので、POSTリクエストを作成する方が良いでしょう。
これは、 POST-Redirect-GETパターン を使用する必要があることを示唆しています。
アドレスバーからクエリ文字列値を削除する
var uri = window.location.toString();
if (uri.indexOf("?") > 0) {
var clean_uri = uri.substring(0, uri.indexOf("?"));
window.history.replaceState({}, document.title, clean_uri);
}
history.replaceState({}, "Title", "page.html");
を使用します
pushState
と同じ構文。ただし、IEを理解する方法を見つける必要があります。
より良い方法は、Apache mod_rewrite
モジュールを使用することです。使い方はとても簡単です。
私は同じ問題に直面しました。私の解決策はこれらでした:このようなリクエストを取得します:
operation.aspx?opr=lock
このように操作のリダイレクトを完了した後:
Response.Redirect("operation.aspx");
応答で、メッセージがある場合、次のように印刷します。
if (Session["InfoMessages"] != null)
{
lblMessage.Text = (string)Session["InfoMessages"];
Session["InfoMessages"] = null;
}
私はそれが他の人を助けることを願っています:)
更新されたコードが動作するようになりました
リンクを変更するページに次のコードを追加するだけです。
// 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 を追加することを忘れないでください
特に$routeProvider
を使用している人のために、これを行う方法をもう1つ追加します。
他のいくつかの回答で言及されているように、これを行うには次を使用します。
var yourCurrentUrl = window.location.href.split('?')[0];
window.history.replaceState({}, '', yourCurrentUrl );
または、履歴スタックに新しいレコードを作成します。
window.history.pushState({}, '', yourCurrentUrl );
history.pushState
およびhistory.replaceState
の使用に関する非常に詳細で素晴らしい説明については、 SOのこの投稿 を読むことができます。
ただし、アプリでAngular$routeProvider
を使用している場合、既存のパターンと一致する場合はこの変更をキャプチャします。これを避けるには、$routeProvider
に reloadOnSearch フラグが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
});
リロードせずにURLパラメータを削除する必要がある個人プロジェクトでこのコードスニペットを使用します。
var newURL = location.href.split("?")[0];
window.history.pushState('object', document.title, newURL);