Страницы: 1
Задача: есть домен для нескольких сайтов которого нужно заменить часть картинок, скриптов и css на свои (часть лежит у клиентов локально, часть другой сервер).
Есть расширение которое решало эту задачу через ContentPolicy:
shouldLoad: function(aContentType, aContentLocation, aRequestOrigin, aContext, aMimeTypeGuess, aExtra) {
...
if (aContentLocation == то_что_нужно) {
aContentLocation = замена;
...
}
...
}
Все чудесно работает под FF1.5/2.0/3bx и НЕ работает под 3rc1
Ошибка: [Exception... "Component returned failure code: 0x80004004 (NS_ERROR_ABORT) [nsIURI.scheme]" nsresult: "0x80004004 (NS_ERROR_ABORT)" location: ... Строка: 134
Штудирование Firefox_3_for_developers к сожалению не помогло.
Может кто уже сталкивался с подобной задачей или есть место отличное от ContentPolicy где безболезненно можно подменить юрл?
Отсутствует
shouldLoad: function(aContentType, aContentLocation, aRequestOrigin, aContext, aMimeTypeGuess, aExtra) {
...
if (aContentLocation == то_что_нужно) {
aContentLocation = замена;
...
Вот прямо так что ли ? Может быть, хотя бы
aContent. location. spec = ....
Вообще интересно, надо попробовать.
Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!
Отсутствует
Вот прямо так что ли ? Может быть, хотя бы
aContent. location. spec = ....
Нет, не прямо. Собирается по частям в смысле aContentLocation.scheme = new_scheme; и тд.
И это реально работает до FF3rc1 не смотря на обещанный readonly в доках. (Через .spec тоже само сабой работает). А вот в последнем FF не работает((( И что самое печальное, идей как это обойти у меня нетъ.
Отсутствует
Результат исправления бага https://bugzilla.mozilla.org/show_bug.cgi?id=337246
Вот пара ссылок, может быть будет полезным: http://groups.google.com/group/mozilla.dev.tech.network/browse_thread/thread/0f51892f8951b676,
http://xpoint.ru/forums/programming/XUL/thread/41061.xhtml
Начинать, я думаю, лучше с http-on-modify-request, потому что подмена mime уже будет происходить когда данные начнут поступать с исходного url, а перекрывать протоколы http и file это уж слишком уж круто.
Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!
Отсутствует
Результат исправления бага https://bugzilla.mozilla.org/show_bug.cgi?id=337246
Огромное, спасибо за ссылку.
I think anyone who relied on something as undocumented as that deserves what
they get.
Видимо я приплыл, чтож сам себе злобное буратино.
Начинать, я думаю, лучше с http-on-modify-request, потому что подмена mime уже будет происходить когда данные начнут поступать с исходного url, а перекрывать протоколы http и file это уж слишком уж круто.
К сожалению, это не совсем то (или совсем не то), что требуется. Тянуть исходные url не приемлемо.
Может я не достаточно четко описал задачу:
Хочется такого: при любом http запросе http://host.domain.tld/path/file
если на локальном компе в условленном месте присутствует host/path/file то грузим локальную копию.
Отсутствует
Может я не достаточно четко описал задачу
Достаточно чётко, мне понятно было с самого начала. У меня у самого примерно такая же сейчас, разница лишь в том, что изменить uri я могу, потому что использую нестандартный протокол, но в FF3 это ничего не даёт, так как исправили не один только #337246.
Подменить http протокол, скорее всего, задача нереальная. То есть, свою компоненту @mozilla.org/network/protocol;1?name=http сделать можно, но можно ли её реализовать в чистом javascript (и сколько это потребует кода) или можно ли её связать с дефолтной, чтобы передавать последней не интересующие запросы - это интересные вопросы.
Далее, можно попробовать исследовать http-on-modify-request (который случается перед отправкой запроса) на предмет подмены ему если и не uri, то, может хотя бы потока.
Ещё можно отлавливать уже входящий контент и, если попадётся интересующий, менять ему mime на нестандартный, и в собственном конвертере этого mime делать нужную работу.
Это мои соображения, но, может быть есть ещё какие-нибудь варианты.
Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!
Отсутствует
Вот такая вот: http://pastebin.mozilla-russia.org/91417 штука, вроде декоратора на стандартный обработчик http-протокола. Работает в FF2 и FF3. Я не проверял, но предполагаю, что при регистрации двух подобных компонент работоспособной будет только одна. Можно попробовать использовать динамическую регистрацию фабрики обработчика, возможно, в этом случае получится полноценный декоратор.
Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!
Отсутствует
Попробовал сделать динамическую регистрацию двух компонент типа такой: http://pastebin.mozilla-russia.org/91418 но не получилось, работает только одна.
Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!
Отсутствует
Elexander
http://pastebin.mozilla-russia.org/93903 == .../91417
http://pastebin.mozilla-russia.org/93902 == .../91418
Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!
Отсутствует
Спасибо, Anton.
Прочитав ваш диалог я прихожу к выводу, что для реализации поставленной задачи в Firefox 3 нет вообще подходящих методов. Так как:
1) В ShouldLoad реализации ContentPolicy нельзя подменить aContentLocation (ошибка NS_ERROR_ABORT)
2) В обсервере события http-on-modify-request замена URI у связанного Channel-а не имеет эффекта.
3) При подмене контента в событии http-on-examine-response все же будет выполнен запрос в Internet.
4) Декоратор для стандартного обработчика http будет работать только для последнего установленного компонента. То есть все предыдущие работать не будут.
Или все же есть? Прошло 6 месяцев с момента обсуждения. Есть ли какие-то находки? Как вы справились с задачей?
Отредактировано Elexander (25-12-2008 16:51:56)
Отсутствует
Или все же есть? Прошло 6 месяцев с момента обсуждения. Есть ли какие-то находки? Как вы справились с задачей?
Вполне возможно, что есть. Я бы посмотрел в сторону блокировщиков - ilo, adblock и т. д., но у меня такая задача не стоит.
Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!
Отсутствует
Страницы: 1