Я пытаюсь написать сценарий Greasemonkey для Facebook и иметь некоторые проблемы с назойливой загрузкой страниц/содержимого, которые они делают (я не совсем понимаю это - много ссылок на самом деле просто меняет GET, но я думаю, что они делают какой-то перенаправление сервера, чтобы URL-адрес выглядел одинаково и в браузере?). По сути, единственным требованием является установка GM_log()
самостоятельно в скрипте. Если вы нажмете Facebook, даже с facebook.com/* в качестве шаблона, он часто не выполняется. Есть ли что-нибудь, что я могу сделать, или идея «загрузки страницы», зафиксированная в Greasemonkey, и FB «обманывает» ее, не запуская, используя один URL-адрес?Сценарий Greasemonkey не выполняется, когда используется необычная загрузка контента
Если я пытаюсь сделать некоторые основные манипуляции контента, как это:
GM.log("starting");
var GM_FB=new Object;
GM_FB.birthdays = document.evaluate("//div[@class='UIUpcoming_Item']", document, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);
for (i = GM_FB.birthdays.snapshotLength - 1; i >= 0; i--) {
if (GM_FB.birthdayRegex.test(GM_FB.birthdays.snapshotItem(i).innerHTML)) {
GM_FB.birthdays.snapshotItem(i).setAttribute('style','font-weight: bold; background: #fffe88');
}
}
Результатом является то, что иногда только обновление руководства страницы будет заставить его работать. Вытягивание консоли Firebug и принудительное выполнение кода отлично работает. Обратите внимание, что это происходит не из-за поздней загрузки некоторых частей DOM: я добавляю некоторый код позже, чтобы дождаться соответствующих элементов и, что, в сущности, сообщение никогда не регистрируется для определенных переходов. Например, когда я переключаюсь с сообщений на ленту новостей и обратно.
Большинство вещей я проверил выглядели как обычные ссылки, но они добавить материал с параметрами URL GET, а не изменения (то есть его всегда остается как facebook.com/?blahfoo). По какой-то причине я, похоже, не получаю другое исполнение GM, когда это происходит. –
У этого есть '#' на URL? URL страницы может измениться, но не перезагрузит страницу. Нет другого способа сделать это, выполняя скрипты с веб-сайта. – BrunoLM
Может ли перенаправление на серверной стороне также остановить работу GM в этом случае? например загрузить FB fresh, Messages href - facebook.com/?sk=messages, но когда вы нажимаете его, он переходит на facebook.com/#!/sk=messages и GM не запускается. Это объясняет часть проблемы. Конечно, это также возится с моим setTimeout (и я не делаю имя функции как ошибку строки), чтобы проверять наличие элементов. Немного неудобного сайта для скрипта. –