Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Удаление элемента DOM при неполном обновлении страницы (ВКонтакте) (https://javascript.ru/forum/events/35365-udalenie-ehlementa-dom-pri-nepolnom-obnovlenii-stranicy-vkontakte.html)

jsuser 08.02.2013 20:34

Удаление элемента DOM при неполном обновлении страницы (ВКонтакте)
 
Мне требуется убрать определенные блоки с сайта ВКонтакте. Пользуюсь Google Chrome. Создал свое расширение - в нем при загрузке страницы проверяю наличие моего блока - если есть, удаляю. Проблема в том, что ВКонтакте при переходе между разделами не обновляет всю страницу, а только блоки. Соответственно, мой скрипт не вызывается. Приходит в голову идея повесить обработчик клика по разделу - запустить цикл проверки появления блока. Но с паузами в циклах в JS не очень, а без них все виснет, разумеется. Подскажите, как в таком случае поступить?

Deff 08.02.2013 20:38

jsuser,
запускаете постоянный и единственный setInterval и все проверки- действия по нему, период 300ms -500ms - вполне не вешающий

Magneto 08.02.2013 20:48

Я не очень разбирался как реализован переход между страницами в ВКонтакте, но на первый взгляд это HTML5 History API. Поэтому можно слушать событие popstate:
window.addEventListener('popstate', function () {
  //  Тут код который проверяет наличие нужного блока
}, false);

jsuser 08.02.2013 20:59

Magneto,
проверил, popstate не происходит при переходе между разделами..
Deff,
спасибо, работает! кривоватая реализация с этим циклом, конечно, но другого не могу придумать..к тому же, если перейти на другую вкладку в хроме, потом опять вернуться - данные на сайте опять обновляются и опять ненужный блок появляется..как можно отловить "такое" обновление страницы?

Deff 08.02.2013 21:06

Цитата:

Сообщение от jsuser
если перейти на другую вкладку в хроме, потом опять вернуться

jsuser,
Onunload - window.onfocus - не сработает ?

jsuser 08.02.2013 21:21

Deff,
работает, но опять только с setInterval-ом, иначе ВКонтактовский скрипт обновляет данные чуть позже моего. Ну, впрочем, если неизвестно, что за событие можно слушать в таком случае (какое-нибудь onDOMChanged или что-нибудь вроде предложенного Magneto popstate), то данной реализации с setInterval-ом мне пока вполне хватит! Спасибо!

Deff 08.02.2013 21:28

jsuser,
А принципе - по Onunload можно втыкивать флаг в window.name и если флаг есть - значит мы вернулись на вкладку - отсюда планируем деяния


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