На facebook.com
, когда нажатие на ссылку появляется для загрузки новой страницы, но (я полагаю) на самом деле просто обновляет существующую страницу с новым кодом, как я могу узнать, когда это новое содержимое полностью загружен? Например, когда вы переходите на facebook.com
, вы начинаете со своей «домашней» страницы (новостной ленты). Когда вы нажимаете на свое имя на панели навигации, вы попадаете на facebook.com/yourname
. Однако на самом деле это не новая страница, так как пользовательский скрипт не перезагружается.
Из-за этого я написал небольшой чекер для своего пользовательского скрипта, который следит за изменением текущего href страницы:
var startURL;
var curURL;
function main() {
startURL = window.location.href;
console.log("initial page. src: "+startURL);
setInterval(checkfornewpage, 500);
}
function checkfornewpage() {
curURL = window.location.href;
if(curURL != startURL) {
console.log("new page. src: "+curURL);
// do something
startURL = curURL;
}
}
main();
Это отлично работает и уведомляет меня, когда страница изменилась. Но при попытке затем получить доступ к элементам на этой новой странице я обнаружил, что возвращаюсь со старой страницы. Я предполагаю, что это связано с тем, что хотя window.location.href
изменился, остальная часть страницы загружена не полностью.
Тогда я решил поискать какой-нибудь контент на новой странице, который, как я знаю, изменится, чтобы понять, полностью ли загружен новый контент. Я выбрал классы тега body
, потому что список классов для body
всегда отличается на каждой новой странице. Я написал функцию для наблюдения за этим, но даже после того, как список классов body
полностью изменился, мои запросы по-прежнему выводят старые данные страницы.
Я также пытался вызвать load()
для элемента body
, но это никогда не срабатывает.
Я не хочу использовать какой-то общий setTimeout
, который просто ждет достаточно долго... Я хочу точно знать, когда он загружается, чтобы я мог двигаться вперед немедленно. Идеи?
the waitForKeyElements()
, аналогичную этому ответу (и другим). При желании можно запустить событиеhashchange
, но это, вероятно, не обязательно. ... ... Наконец, ваши последние три вопроса кажутся дубликатами. Вы можете удалить один или два и отредактировать выживших, чтобы модератор не ударил вас. - person Brock Adams   schedule 16.06.2012