#javascript #query-parameters
Вопрос:
Интересно, можно ли добавить параметр запроса, который автоматически добавляется при посещении страницы пользователем? Например https://example.org/example-script.js
, становится https://example.org/example-script.js?example=value
. Кто-нибудь знает, как это сделать? Если да, пожалуйста, ответьте на этот вопрос. Я благодарен каждому полезному ответу, который я получаю.
Ответ №1:
Файл js не будет выполняться в браузере, если перейти непосредственно к нему. Для этого вам нужно будет нажать обычный документ (например,. html), а затем выполнить файл javascript оттуда.
Тем не менее, то, что вы хотите сделать, в основном заключается в следующем:
const urlParams = new URLSearchParams(window.location.search);
urlParams.set('example', 'value');
window.location.search = urlParams;
Это не приведет к перезагрузке страницы, а просто добавит параметры вашего запроса, как вы хотели.
Комментарии:
1. Ноно, это не то, что я имел в виду. Я не хочу запускать файл js в браузере, я спрашиваю, как я могу это сделать, чтобы он добавлял туда нужные мне переменные? Например: пользователь посещает
example-jsfile.js
, но затем js добавляет параметрыexample-jsfile.js?example=value
. Я надеюсь, что это более точная информация для вас, чтобы понять, что я имею в виду.2. Ладно, я не совсем понимаю. я сделал js, чтобы проверить это, но он буквально не добавляет переменную. Это только для HTML <скрипта> или непосредственно для файла JS?
3. это nvm. Но теперь у меня другая проблема, страница не перестает постоянно перезагружаться, в любом случае, чтобы это исправить?
4. Похоже, мне нужно было только удалить
window.location.search = urlParams;
в скрипте, и это исправило проблему, все еще ли это проблема, если я удалю это? Или я могу просто выпустить это из кода?5. Ладно, похоже, это не так. Я добавил его обратно, теперь он не перестанет перезагружаться. Есть какой-нибудь способ это исправить?
Ответ №2:
Я ставлю под сомнение ваши рассуждения, и прежде чем реальный ответ может быть полезен, вы должны показать больше окружающего кода.
Поэтому позвольте мне сначала дать отзыв по самому вопросу: если вы хотите отслеживать, посещал ли пользователь уже страницу, гораздо полезнее хранить ее в файле cookie или что-то вроде localstorage. Однако обратите внимание, что на самом деле это сомнительно в отделе конфиденциальности во многих частях мира.
В предлагаемой вами идее вы активно меняете URL — адрес-таким образом, вы обманываете браузер, чтобы перейти на другую страницу (или, по крайней мере, инструменты закладок будут добавлять закладки на другую страницу).
Теперь вторая проблема, что вы подразумеваете под «посещением страницы» — в вашем примере показана ссылка на источник javascript. Что-то, что обычно не является «страницей»…
Но, учитывая, что вы действительно возвращаете HTML-страницу на этом сайте, и вы действительно хотите сохранить ее внутри URL-адреса, который вы бы использовали onload
(https://developer.mozilla.org/en-US/docs/Web/API/GlobalEventHandlers/onload) даже вместе с window.pushState
(https://developer.mozilla.org/en-US/docs/Web/API/History/pushState)
<!doctype html>
<html>
<head>
<title>onload test</title>
// ES5
<script>
function load() {
window.history.pushState({example: value}, '');
}
window.onload = load;
</script>
</head>
<body>
<p>The load event fires when the document has finished loading!</p>
</body>
</html>
Комментарии:
1. Похоже, ты не совсем это понимаешь. Что я хочу этим сказать, так это то, что когда пользователь посещает страницу
example.js
, она заменяетсяexample.js?example=value
на «это», вот что я имею в виду.2. @rhong59 так что улучши вопрос 🙂
3. @rhong59 вы имеете в виду, что вместо загрузки ресурсов
.../example.js
вы загружаете ресурс из.../example.js?example=value
? Тогда это зависит от того, как вы загружаете ресурс в первую очередь, автоматизирован ли он, при нажатии на ссылку вызывается ajax?4. нет, на самом деле я не это имею в виду. Что я хочу знать, так это, если это возможно, что если вы просматриваете JS напрямую, он автоматически добавляет параметры.
example.js
->example.js?example=value