>Форум Mozilla Россия http://forum.mozilla-russia.org/index.php >Разработка http://forum.mozilla-russia.org/viewforum.php?id=18 >(только для крутых) как отследить изменение location.href? http://forum.mozilla-russia.org/viewtopic.php?id=21074 |
AllSeeingI > 17-01-2008 01:48:55 |
Здравствуйте все ещё раз, Пытаюсь в своём аддоне проследить все редиректы. HTTP-редиректы (3xx) отслеживаются легко - см. LiveHTTPHeaders. META-редиректы тоже легко находятся - см. RefreshBlocker. Остался последний "вид" редиректов - изменение скриптом свойства location.href. Можно ли как-нибудь в Мозилле (со стороны аддона) отследить, что пользовательский скрипт (который на загруженной HTML странице) этот location.href меняет? Заранее спасибо. P.S. Здесь советуют: "Для этого нужно запускать скрипты в контексте аддона (т.е. вместо родного объекта window порождать свой аналогичный, эмулирующий оригинал через getters/setters)." Чтобы это значило? Автор того поста молчит... |
Shutnik > 17-01-2008 05:10:28 |
я делал примерно так: Выделить код Код: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); |
AllSeeingI > 17-01-2008 20:14:11 |
shutnik: вы просто отслеживаете изменение адреса текущей страницы; я имел ввиду немного другое - как отследить изменение свойства href объекта location при прямом обращении к нему из пользовательского JavaScriptа. Перефразирую: можно ли отследить из аддона, к каким объектам/свойствам обращается клиентский скрипт? |
Shutnik > 17-01-2008 21:56:45 |
тут отслеживается изменение url всех открытых табов
думаю, нет. по крайней мере, я абсолютно не представляю себе, как такое можно реализовать |
Infocatcher > 17-01-2008 23:59:03 |
Можно попробовать что-нибудь вроде: Выделить код Код: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 делать Либо по добавлению вкладки (DOMNodeInserted ?) запускать цикл с проверкой |
Shutnik > 18-01-2008 00:33:24 |
те же яйца, только в профиль |
AllSeeingI > 18-01-2008 16:51:31 |
Infocatcher: тут ещё такая ерунда: в chrome-режиме (= в аддоне) объект location не имеет функции watch - хотя если смотреть со стороны HTML-страницы, то до location.watch("href", ...) достучаться можно. Но даже это не поможет, т.к. нужно ещё отслеживать location.refresh(...) например. Здесь советуют: "Для этого нужно запускать скрипты в контексте аддона (т.е. вместо родного объекта window порождать свой аналогичный, эмулирующий оригинал через getters/setters)." Только вот чтобы это значило? Вытаскивать тексты скрипта из страницы и работать eval'ом? |