Есть ли способ получить обратный вызов после изменения window.location.href?

По сути, я хотел бы сделать следующее:

window.location.href = "some_location";
window.onload = function() {
  alert("I'm the new location and I'm loaded!");
};

Есть ли способ сделать обратный вызов при загрузке нового местоположения окна? (Приведенный выше код не работает.)

3 ответа

Решение

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

Чтобы иметь обработчик событий при загрузке нового документа, вам нужно будет либо вставить код в документ новой страницы, либо загрузить новый документ в iframe и следить за загрузкой iframe из текущего документа.

Установка в window.location.href нового значения указывает браузеру просто перейти на следующую страницу.

Вот так:

window.location.href = "http://www.google.com/";

Как только браузер переходит на google.com, все, ваш Javascript больше не выполняется, и у вас нет возможности сделать какой-либо обратный вызов, потому что браузер больше не запускает вашу страницу.

Итак, ответ - нет.

что касается обратного вызова и выполнения js в новом контексте - нет (согласно исходному ответу), но есть способы доступа к загруженным элементам без обратного вызова. Например, scrollIntoViewк загруженному элементу вы можете добавить селектор:

      const href = '#someElem'
if(window.location.pathname  !== '/') window.location.href = `/${href}`
else document.querySelector(href).scrollIntoView() 
Другие вопросы по тегам