Страницы: 1
Здравствуйте все ещё раз,
Пытаюсь в своём аддоне проследить все редиректы. HTTP-редиректы (3xx) отслеживаются легко - см. LiveHTTPHeaders. META-редиректы тоже легко находятся - см. RefreshBlocker. Остался последний "вид" редиректов - изменение скриптом свойства location.href.
Можно ли как-нибудь в Мозилле (со стороны аддона) отследить, что пользовательский скрипт (который на загруженной HTML странице) этот location.href меняет?
Заранее спасибо.
P.S. Здесь советуют: "Для этого нужно запускать скрипты в контексте аддона (т.е. вместо родного объекта window порождать свой аналогичный, эмулирующий оригинал через getters/setters)." Чтобы это значило? Автор того поста молчит...
Отсутствует
я делал примерно так:
var foo = { load: function () { document.getElementById("appcontent").addEventListener("load", foo.load_listener, true); }, load_listener: function (event) { alert(event.originalTarget.location.href); } } window.addEventListener("load", function () { foo.load(); }, false);
Отсутствует
shutnik: вы просто отслеживаете изменение адреса текущей страницы; я имел ввиду немного другое - как отследить изменение свойства href объекта location при прямом обращении к нему из пользовательского JavaScriptа.
Перефразирую: можно ли отследить из аддона, к каким объектам/свойствам обращается клиентский скрипт?
Отсутствует
вы просто отслеживаете изменение адреса текущей страницы
тут отслеживается изменение url всех открытых табов
Перефразирую: можно ли отследить из аддона, к каким объектам/свойствам обращается клиентский скрипт?
думаю, нет. по крайней мере, я абсолютно не представляю себе, как такое можно реализовать
Отсутствует
Можно попробовать что-нибудь вроде:
var brs = getBrowser().browsers; for(var i = 0; i < brs.length; i++) { var br = brs[i]; // или по добавлению вкладки обращаться к конкретному brs[i] br.addEventListener("unload", unloadHandler, true); var el = ...; // не помню, что возвращает getBrowser().browsers, скорее всего, массив из <browser> el.watch( "property", // "href", видимо... function(propName, oldVal, newVal) { alert(newVal); return newVal; } ); }
В unloadHandler делать
el.unwatch("property");
и
br.removeEventListener("unload", unloadHandler, true);
Либо по добавлению вкладки (DOMNodeInserted ?) запускать цикл с проверкой
for(var i = 0; i < brs.length; i++) {
if(!br.isInit) {
br.isInit = true;
// ...
}
}
Либо после добавления вкладки узнавать конкретный br
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
Infocatcher: тут ещё такая ерунда: в chrome-режиме (= в аддоне) объект location не имеет функции watch - хотя если смотреть со стороны HTML-страницы, то до location.watch("href", ...) достучаться можно.
Но даже это не поможет, т.к. нужно ещё отслеживать location.refresh(...) например.
Здесь советуют: "Для этого нужно запускать скрипты в контексте аддона (т.е. вместо родного объекта window порождать свой аналогичный, эмулирующий оригинал через getters/setters)." Только вот чтобы это значило? Вытаскивать тексты скрипта из страницы и работать eval'ом?
Отредактировано AllSeeingI (18-01-2008 16:52:54)
Отсутствует
Страницы: 1