Добровольный сценарий перенаправления кнопки «Назад»?

Я пытаюсь использовать функцию сценария перенаправления кнопки «Назад». У меня есть плагин, который воспроизводит фоновую (инициируемую пользователем) музыку на моем сайте. Пока пользователь нажимает кнопку «вперед», музыка непрерывно и почти непрерывно течет со страницы на страницу без перезапуска. Если пользователь нажимает кнопку «Назад» (или обновляет), музыка останавливается, и он должен вручную нажать кнопку воспроизведения, чтобы перезапустить поток. Автор говорит, что у них нет способа решить эту проблему. Я пока не сдаюсь.

Я думаю, почему бы не использовать JavaScript для записи URL-адреса предыдущей страницы браузера, затем захвата триггера кнопки «Назад» и отправки пользователя «вперед» на этот URL-адрес, таким образом сохраняя музыкальный поток нетронутым, соблюдая желание пользователя вернуться на страницу назад?

Концептуально, будучи супернубом в JavaScript, я собрал это вместе из разных источников здесь и codingbeautydev...

$(window).bind("onpopstate", function (e) {
    const previousPage = document.getElementById("previous-page");
    previousPage.textContent = document.referrer;

    window.history.pushState({ page: 1 }, "", "");
    window.onpopstate = function (event) {
        if (event) {
            window.location.href = previousPage;
        }
    };
});

Моей первой мыслью было то, что в моей работе наверняка есть какие-то синтаксические ошибки и, возможно, гораздо больше, что нужно изменить, но я надеюсь, что кто-то сможет легко подправить мой грубый набросок. Кроме того, помимо выполнения этой работы, я вижу пределы этого, позволяя только 1 страницу истории, и мне любопытно, есть ли способ вложить ее в стопку из нескольких страниц, которые можно было бы посетить в обратном порядке, все при движении «вперед». Сначала о главном, а потом о большем и лучшем.

Спасибо ребята! 😀 Отметка

Пожалуйста, уточните вашу конкретную проблему или предоставьте дополнительную информацию, чтобы выделить именно то, что вам нужно. Как сейчас написано, трудно точно сказать, о чем вы спрашиваете.

Menelaos Vergis 14.12.2022 10:31

Я просто хочу отправить кого-то (через location.href) на предыдущую страницу, на которой он был, когда нажимал кнопку «Назад». Я не хочу, чтобы кнопка «Назад» работала по умолчанию. Мне нужно, чтобы он фактически действовал как ссылка, движущаяся вперед, а не назад. то есть я нахожусь на www.site.com/paper, затем я нажимаю ссылку на странице на www.site.com/boxes, и это загружается. Затем я нажимаю кнопку «Назад», но вместо того, чтобы позволить обычной функции «Назад» работать, я хочу узнать, какой был URL-адрес предыдущей страницы (www.site.com/paper), и вместо этого использовать location.href для загрузки этой страницы. Надеюсь, это поможет! Спасибо!

SimPub 14.12.2022 11:26

Ваш комментарий более прямолинеен, чем сам вопрос. Вы должны следовать рекомендациям по вопросам StackOverflow, чтобы сформировать правильный вопрос. Я предлагаю вам обновить вопрос только до одного вопроса. Очистите текст, чтобы он не содержал никаких личных приветствий или юмора (спасибо, ребята, Марк. Я еще не сдаюсь, давайте начнем здесь и посмотрим, как пойдет... и т. д.). Измените заголовок на «Переопределить действие кнопки «Назад» в браузере по умолчанию» и спрашивайте только о конкретной проблеме. Хорошая работа по добавлению кода.

Menelaos Vergis 14.12.2022 13:54
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
3
73
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы не можете изменить поведение по умолчанию кнопки «Назад» или «Вперед» в браузере, если только ваше приложение не использует хэши URL-адресов для навигации, но, насколько я понимаю ваш вопрос, пользователь на самом деле переходит, скажем, от .com/paper к .com/boxes, а не от .com/paper#page1 к .com/paper#page2.

Один из возможных вариантов, который вы можете попробовать, — это использовать следующий (отсюда):

window.addEventListener('pageshow', function (event) {
    if (event.persisted || performance.getEntriesByType("navigation")[0].type === 'back_forward') {
        // User got here from using the Back or Forward button
    }
});

Это сработает, когда пользователь попадет на страницу, на которой работает этот код, с помощью кнопки окна «назад» или «вперед», а также если пользователь перейдет от /boxes обратно к /paper.

Вы можете попытаться сохранить текущее состояние музыки, воспроизводимой в фоновом режиме (какая песня, метка времени, уровень звука и т. д.) в локальном хранилище (макс.) каждую секунду или около того, и получить сохраненные значения внутри функции выше, чтобы продолжить музыка, которую пользователь в последний раз слушал, когда покидал предыдущую страницу. Не самое элегантное решение, но все, о чем я сейчас думаю, может действительно сработать.

Редактировать:

Код, который вы запрашивали. Chrome и Safari будут блокировать/игнорировать его из-за манипуляций с историей, за исключением случаев, когда пользователь сначала взаимодействует со страницей. Это не то, как следует использовать history. Не используйте его в продакшене, а играйте с ним сколько хотите. Также вот простой пример того, как можно использовать историю.

window.history.pushState({}, '', window.location.pathname);
let previousPage = document.referrer;
window.addEventListener('popstate', (e) => {    
    window.location.assign(previousPage)
});  

Я не уверен, что понимаю ваше предложение, но что касается музыки, мне ничего не нужно делать, чтобы увековечить воспроизведение, кроме как не перемещаться назад. При нажатии на любую ссылку на сайте непрерывно воспроизводится музыка в фоновом режиме. Есть ли способ на любой данной веб-странице вызвать URL-адрес страницы, с которой пришел пользователь? т. е. lastPage = theURL.iwasat.wheniclicked.thelink.togethere Если это так, я вижу, как люди перенаправляют пользователей, когда они нажимают кнопку «Назад», на любой сайт, который им нужен. Я просто хочу, чтобы они нажали кнопку «Назад» и были переадресованы на последнюю страницу. 😀

SimPub 15.12.2022 05:18

То, что вы хотите, будет 1) работать только в SPA и 2) вызывать цикл между текущей страницей и первой страницей в стеке истории. Это манипуляция историей, и как в Chrome, так и в Safari есть защита именно для этого, чтобы пользователи не попали в ловушку. Так что это не сработает. Тем не менее, Firefox каким-то образом позволяет это. Я добавил в свой ответ некоторый код, который делает то, что вы хотите, однако он работает только в Firefox (например, в Chrome вам нужно сначала взаимодействовать со страницей, чтобы popstate сработал).

Cooleronie 15.12.2022 22:21

Хорошо, я понял. Я ценю, что вы добавили это. Это все еще полезно для меня, чтобы понять и практиковать. Я вижу, что вы говорите с петлей. Я сам был обеспокоен этим, и я думал, что следующим шагом будет реализация способа построения стека из первой целевой страницы и управления им вручную, чтобы пользователь мог перемещаться назад, если не полностью, то, возможно, 5 или 10 страниц, чтобы сделать его практичным. В конце концов, я всегда хочу сделать пользователя счастливым. На данном этапе кажется, что компромисс не совсем точный ответ на лучший способ обработки музыки.

SimPub 18.12.2022 10:46

Другие вопросы по теме