Удаление параметров URL без обновления страницы
Я пытаюсь удалить все после "?"в браузере url на документ готов.
вот что я пытаюсь:
jQuery(document).ready(function($) {
var url = window.location.href;
url = url.split('?')[0];
});
Я могу сделать это и увидеть его работы:
jQuery(document).ready(function($) {
var url = window.location.href;
alert(url.split('?')[0]);
});
11 ответов:
TL; DR
чтобы изменить текущий URL и добавить его (новый измененный URL) в качестве нового URL-адреса для записей истории используйте
pushState
:window.history.pushState({}, document.title, "/" + "my-new-url.html");
чтобы заменить текущий URL без добавления его в записи истории, используйте
replaceState
:window.history.replaceState({}, document.title, "/" + "my-new-url.html");
в зависимости от вашей бизнес-логики
pushState
будет полезно в таких случаях, как:
если вы хотите поддержать кнопку браузера назад
если вы хотите создать новый URL, добавить/вставить / нажать новый URL в записи истории и сделать его текущим URL
разрешить пользователям добавлять закладки на страницу с теми же параметрами (чтобы показать то же содержимое)
для программного доступа к данным через
stateObj
чем разбор от якоря.
как я понял из вашего комментария, вы просто хотите очистить свой URL-адрес без перенаправления снова.
обратите внимание, что вы не можете изменить весь URL-адрес. Вы можете просто изменить то, что идет после имени домена. Это означает, что вы не можете изменить
www.example.com/
но вы можете изменить то, что идет после.com/
www.example.com/old-page-name => can become => www.example.com/myNewPaage20180322.php
фон
мы можем использовать:
1- метод pushState () если вы хотите добавить новая изменен URL для записей истории.
2- метод replaceState () если вы хотите чтобы обновить/заменить настоящее запись истории.
history.replaceState()
работает точно так же, какhistory.pushState()
кроме этогоreplaceState()
изменяет текущую историю запись вместо создания нового. Обратите внимание, что это не мешает созданию новой записи в истории браузера.
replaceState()
особенно полезно, когда вы хотите обновить состояния объекта или URL-адрес текущей записи в ответ на некоторые пользователь действие.
код
для этого я буду использовать метод pushState () для этого примера, который работает аналогично следующему формату:
var myNewURL = "my-new-URL.php";//the new URL window.history.pushState("object or string", "Title", "/" + myNewURL );
не стесняйтесь, чтобы заменить
pushState
СreplaceState
основанный на ваших требованиях.вы можете заменить параметр
"object or string"
С{}
и"Title"
Сdocument.title
таким образом, окончательное утверждение станет:window.history.pushState({}, document.title, "/" + myNewURL );
результаты
предыдущие две строки кода сделают URL-адрес, например:
https://domain.tld/some/randome/url/which/will/be/deleted/
стать:
https://domain.tld/my-new-url.php
действие
теперь давайте попробуем другой подход. Скажем, вам нужно сохранить имя файла. Имя файла следует за последним
/
и перед строкой запроса?
.http://www.someDomain.com/really/long/address/keepThisLastOne.php?name=john
будет:
http://www.someDomain.com/keepThisLastOne.php
что-то вроде этого заставит его работать:
//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; }
обновление:
для одного лайнера вентиляторов, попробуйте это в консоли / firebug и URL этой страницы изменится:
window.history.pushState("object or string", "Title", "/"+window.location.href.substring(window.location.href.lastIndexOf('/') + 1).split("?")[0]);
URL этой страницы изменится с:
http://stackoverflow.com/questions/22753052/remove-url-parameters-without-refreshing-page/22753103#22753103
до
http://stackoverflow.com/22753103#22753103
Примечание: как Самуил Лью указано в комментариях ниже, эта функция была введена только для
HTML5
.альтернативный подход было бы на самом деле перенаправить вашу страницу (но вы потеряете строке запроса `?', это все еще необходимо или данные были обработаны?).
window.location.href = window.location.href.split("?")[0]; //"http://www.newurl.com";
все это вводит в заблуждение, вы никогда не хотите добавлять в историю браузера, Если вы не хотите перейти на другую страницу в одном приложении страницы. Если вы хотите удалить параметры без изменения на странице, вы должны использовать:
window.history.replaceState(null, null, window.location.pathname);
простой способ сделать это, работает на любой странице, требует HTML 5
// get the string following the ? var query = window.location.search.substring(1) // is there anything there ? if(query.length) { // are the new history methods available ? if(window.history != undefined && window.history.pushState != undefined) { // if pushstate exists, add a new state the the history, this changes the url without reloading the page window.history.pushState({}, document.title, window.location.pathname); } }
Я считаю, что лучший и самый простой метод для этого:
var newURL = location.href.split("?")[0]; window.history.pushState('object', document.title, newURL);
если у меня есть специальный тег в конце моего URL-адреса, например:http://domain.com/?tag=12345 Вот код ниже, чтобы удалить этот тег всякий раз, когда он присутствует в URL:
<script> // Remove URL Tag Parameter from Address Bar if (window.parent.location.href.match(/tag=/)){ if (typeof (history.pushState) != "undefined") { var obj = { Title: document.title, Url: window.parent.location.pathname }; history.pushState(obj, obj.Title, obj.Url); } else { window.parent.location = window.parent.location.pathname; } } </script>
это дает идею удалить один или несколько (или все) параметров из URL
С
чтобы очистить все параметры, не делая обновления страницы, и если вы используете HTML5, то вы можете сделать это:
history.pushState({}, '', 'index.html' ); //replace 'index.html' with whatever your page name is
добавить запись в историю браузера. Вы также можете рассмотреть
replaceState
Если вы не хотите добавлять новую запись и просто хотите заменить старую запись.
Я хотел удалить только одну парам
success
. Вот как вы можете это сделать:let params = new URLSearchParams(location.search) params.delete('success') history.replaceState(null, '', '?' + params + location.hash)
это также сохраняет
#hash
.
URLSearchParams
не будет работать на IE, но работает на краю. Вы можете использовать полифилл или может использовать наивную вспомогательную функцию для IE-support:function take_param(key) { var params = new Map(location.search.slice(1).split('&') .map(function(p) { return p.split(/=(.*)/) })) var value = params.get(key) params.delete(key) var search = Array.from(params.entries()).map( function(v){ return v[0]+'='+v[1] }).join('&') return {search: search ? '?' + search : '', value: value} }
это можно использовать как:
history.replaceState( null, '', take_param('success').search + location.hash)
//Joraid code is working but i altered as below. it will work if your URL contain "?" mark or not //replace URL in browser if(window.location.href.indexOf("?") > -1) { var newUrl = refineUrl(); window.history.pushState("object or string", "Title", "/"+newUrl ); } function refineUrl() { //get full url var url = window.location.href; //get url after/ var value = url = url.slice( 0, url.indexOf('?') ); //get the part after before ? value = value.replace('@System.Web.Configuration.WebConfigurationManager.AppSettings["BaseURL"]',''); return value; }