Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Отследить событие "изменение url без перезагрузки страницы" и получить новый url (https://javascript.ru/forum/events/53859-otsledit-sobytie-izmenenie-url-bez-perezagruzki-stranicy-i-poluchit-novyjj-url.html)

solomon2 21.02.2015 16:57

Отследить событие "изменение url без перезагрузки страницы" и получить новый url
 
Как отследить событие "изменение url без перезагрузки страницы" и получить новый url? Например, vk.com url-ы меняются без перезагрузок, делаю плагин который должен получать эти урлы в момент их изменения.

solomon2 22.02.2015 06:50

Вопрос закрыт. Проблема решена средствами Api для создания расширений.

darl 19.02.2016 21:21

Цитата:

Сообщение от solomon2 (Сообщение 357745)
Вопрос закрыт. Проблема решена средствами Api для создания расширений.

Спасибо что позаботился о нас, которые столкнулись с такой же проблемой и НИХЕРА не понял из твое темы как ее решить)

Mantikorich 08.12.2017 12:11

Цитата:

Сообщение от darl (Сообщение 408489)
Спасибо что позаботился о нас, которые столкнулись с такой же проблемой и НИХЕРА не понял из твое темы как ее решить)

У тебя получилось решить эту проблему?

darl 08.12.2017 14:02

Цитата:

Сообщение от Mantikorich (Сообщение 472349)
У тебя получилось решить эту проблему?

Столько времени прошло, по-моему использовал
HTML5 History API
http://htmlbook.ru/html5/history
https://habrahabr.ru/post/123106/

Arigato 22.12.2023 10:31

А, собственно, как? Перепробовал разные решения, что предлагают через поиск в гугл, ни одно не работает. Вот пример:

function e(){
	console.log("CHANGE:");
	console.log(document.location.href);
}

window.addEventListener('hashchange',  e);
window.addEventListener('popstate', e);
window.addEventListener('locationchanged', e);
e();


Не срабатывает. Лучшее тут это событие popstate, про него вот что пишут:

Цитата:

Это событие срабатывает при переход от одного элемента истории к другому. При этом history.pushState() и history.replaceState() не приводят к вызову этого события. Только нажатие кнопок вперед/назад в браузере, либо вызов history.back() или аналогичной функции в Javascript.
И да, оно срабатывает при нажатии кнопок в браузере, но не срабатывает, если адрес меняется из скриптов.

Есть ли адекватное решение, как поймать момент изменения адреса страницы? Можно, конечно, в таймере отслеживать, и такое тоже предлагают, но это как-то не очень выглядит...

ruslan_mart 22.12.2023 13:21

Arigato, это не то пальто. Это работает только в том случае, если на сайте весь роутинг реализован через history и вы не сможете определить переход между разными доменами.

Вам нужно использовать chrome.webNavigation API

chrome.tabs.onUpdated.addListener((tabId, changeInfo, tab) => {
    if (changeInfo.url) {
        console.log('URL изменился на: ' + changeInfo.url);
    }
});


И не забывайте про пермишены на домены в вашем манифест-файле.


Часовой пояс GMT +3, время: 08:46.