TL; DR
1- Untuk memodifikasi URL saat ini dan menambahkan / inject itu (URL dimodifikasi baru) sebagai URL entri baru ke daftar sejarah, penggunaan pushState:
window.history.pushState({}, document.title, "/" + "my-new-url.html");
2- Untuk mengganti URL saat ini tanpa menambahkannya ke entri riwayat, gunakan replaceState:
window.history.replaceState({}, document.title, "/" + "my-new-url.html");
3 - Bergantung pada logika bisnis Anda , pushStateakan berguna dalam kasus-kasus seperti:
Anda ingin mendukung tombol kembali browser
Anda ingin membuat sebuah baru URL, tambahkan / insert / mendorong URL baru untuk sejarah entri, dan membuatnya URL saat ini
memungkinkan pengguna untuk menandai halaman dengan parameter yang sama (untuk menampilkan konten yang sama)
untuk pemrograman mengakses dengan data yang melalui stateObjkemudian mengurai dari jangkar
Seperti yang saya mengerti dari komentar Anda, Anda ingin membersihkan URL Anda tanpa mengarahkan ulang.
Perhatikan bahwa Anda tidak dapat mengubah seluruh URL. Anda bisa mengubah apa yang muncul setelah nama domain. Ini berarti bahwa Anda tidak dapat mengubah www.example.com/tetapi Anda dapat mengubah apa yang terjadi setelahnya.com/
www.example.com/old-page-name => can become => www.example.com/myNewPaage20180322.php
Latar Belakang
Kita bisa menggunakan:
1- Metode pushState () jika Anda ingin menambahkan URL yang dimodifikasi baru ke entri riwayat.
2- Metode replaceState () jika Anda ingin memperbarui / mengganti entri riwayat saat ini .
.replaceState()beroperasi persis seperti .pushState()kecuali yang .replaceState() memodifikasi entri riwayat saat ini alih-alih membuat yang baru. Perhatikan bahwa ini tidak mencegah pembuatan entri baru dalam riwayat browser global.
.replaceState()sangat berguna ketika Anda ingin memperbarui objek negara atau URL dari entri riwayat saat ini sebagai respons terhadap beberapa tindakan pengguna.
Kode
Untuk melakukan itu saya akan menggunakan metode The pushState () untuk contoh ini yang bekerja mirip dengan format berikut:
var myNewURL = "my-new-URL.php";//the new URL
window.history.pushState("object or string", "Title", "/" + myNewURL );
Jangan ragu untuk menggantinya pushStatedengan replaceStateberdasarkan pada kebutuhan Anda.
Anda dapat mengganti paramter "object or string"dengan {}dan "Title"dengan document.titledemikian statment akhir akan menjadi:
window.history.pushState({}, document.title, "/" + myNewURL );
Hasil
Dua baris kode sebelumnya akan membuat URL seperti:
https://domain.tld/some/randome/url/which/will/be/deleted/
Untuk menjadi:
https://domain.tld/my-new-url.php
Tindakan
Sekarang mari kita coba pendekatan yang berbeda. Katakanlah Anda perlu menyimpan nama file. Nama file muncul setelah yang terakhir /dan sebelum string kueri ?.
http://www.someDomain.com/really/long/address/keepThisLastOne.php?name=john
Akan:
http://www.someDomain.com/keepThisLastOne.php
Sesuatu seperti ini akan membuatnya bekerja:
//fetch new URL
//refineURL() gives you the freedom to alter the URL string based on your needs.
var myNewURL = refineURL();
//here you pass the new URL extension you want to appear after the domains '/'. Note that the previous identifiers or "query string" will be replaced.
window.history.pushState("object or string", "Title", "/" + myNewURL );
//Helper function to extract the URL between the last '/' and before '?'
//If URL is www.example.com/one/two/file.php?user=55 this function will return 'file.php'
//pseudo code: edit to match your URL settings
function refineURL()
{
//get full URL
var currURL= window.location.href; //get current address
//Get the URL between what's after '/' and befor '?'
//1- get URL after'/'
var afterDomain= currURL.substring(currURL.lastIndexOf('/') + 1);
//2- get the part before '?'
var beforeQueryString= afterDomain.split("?")[0];
return beforeQueryString;
}
MEMPERBARUI:
Untuk satu penggemar liner, coba ini di konsol / pembakar Anda dan URL halaman ini akan berubah:
window.history.pushState("object or string", "Title", "/"+window.location.href.substring(window.location.href.lastIndexOf('/') + 1).split("?")[0]);
URL halaman ini akan berubah dari:
http://stackoverflow.com/questions/22753052/remove-url-parameters-without-refreshing-page/22753103#22753103
Untuk
http://stackoverflow.com/22753103#22753103
Catatan: seperti yang ditunjukkan oleh Samuel Liew dalam komentar di bawah, fitur ini hanya diperkenalkan untuk HTML5.
Pendekatan alternatif sebenarnya untuk mengarahkan ulang halaman Anda (tetapi Anda akan kehilangan string kueri `? ', Apakah masih diperlukan atau data telah diproses?).
window.location.href = window.location.href.split("?")[0]; //"http://www.newurl.com";