У меня есть несколько разных html-страниц, и мне нужно, чтобы одна из них загружалась случайным образом при каждом обновлении страницы. Это то, что у меня есть до сих пор, единственная проблема в том, что я застреваю в бесконечном цикле обновления. Как я могу загрузить только одну страницу при обновлении?
var sites = ['/one.html', '/two.html', '/three.html'];
var randomUrl = sites[Math.floor(Math.random() * sites.length )];
window.location.reload = randomUrl;
Заранее спасибо!
Я знаю ... что имеет смысл в том, почему он застрял в петле. Как он узнает о загрузке случайного файла при обновлении, если скрипт не загружен на каждом из них?
Вы хотите загрузить одну страницу, а затем перейти на одну из трех случайных страниц, или вы хотите перенаправлять на случайную страницу всякий раз, когда вы попадаете на одну из трех страниц?
Я создаю своего рода StumbleUpon (но с локальными URL-адресами), поэтому я не обязательно ищу какую-либо пересылку, а не просто загружаю любую из html-страниц случайным образом каждый раз, когда пользователь обновляет страницу. Имеет ли это смысл?
В этом есть смысл. Вы можете создать страницу index.html, загрузить в нее случайный файл с помощью AJAX и вставить его содержимое в DOM. Сейчас я напишу ответ, описав это более подробно.
window.location.reload не идет по пути .....
Случайная логика должна обрабатываться на стороне сервера. Это означает, что всякий раз, когда запрашивается страница, сервер бросает кости и отправляет случайную страницу.
@epascarello Я не совсем понимаю, что это значит. У тебя есть решение?
@AdityaGupta Есть простой способ сделать это с помощью JavaScript? В настоящее время у меня нет серверной части для этого.
reload - это метод .... developer.mozilla.org/en-US/docs/Web/API/Location/reload Вы не используете его для перехода на новую страницу!
Невозможно узнать, была ли страница обновлена или на которую был выполнен переход. Вы можете сохранить информацию о сеансе, чтобы увидеть, загружена ли страница, но это не обрабатывает случаи, когда у пользователя открыто более одного окна, и так далее.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Простое исправление - передача параметра
window.location.reload = randomUrl + "?reload=0";
и проверьте параметр запроса reload = 0, прежде чем делать
window.location.reload = randomUrl;
Похоже, у меня это не работает. Не загружает другие HTML-страницы при перезагрузке. Я также несколько новичок в javascript, поэтому я буквально просто копирую и вставляю.
Если вы просто пишете небольшую непроизводственную обучающую страницу (потому что, на мой взгляд, это не очень хорошая практика). Вы можете использовать Cookie / местное хранилище / хранение сессий.
if (sessionStorage.getItem('loaded')===null){
sessionStorage.setItem('loaded', '1');
**YOUR CODE**
}
else{
/* remove if you just loaded a random page so it will work after the next reload */
sessionStorage.removeItem('loaded')
}
Я сделаю вам sessionStore, потому что он будет сброшен, если браузер будет закрыт, но на самом деле на данный момент это не имеет значения.
Это сработало для меня! Большое спасибо. Просто любопытно, почему это считается плохой практикой?
Я не знаю ... это просто чувство. Может и нормально :)
Вы получаете бесконечный цикл, потому что каждый раз, когда загружается новая страница, сценарий выполняется снова и снова, а также потому, что у вас есть один и тот же сценарий, загруженный в каждый из этих html. У вас может быть триггер события, чтобы он выполнялся только после того, как это произойдет, например, щелчок мышью (пример ниже) Если вы хотите, чтобы эта случайная страница открывалась только один раз, вы можете разместить скрипт только на главной странице.
document.onclick = reloadpage;
function reloadpage() {
var sites = ['/one.html', '/two.html', '/three.html'];
var randomUrl = sites[Math.floor(Math.random() * sites.length )];
window.open(randomUrl, "_self");
}
Возможно, у вас есть этот сценарий на всех трех страницах HTML?