Полезная информация

Общайтесь со знакомыми и друзьями в нашей группе в Контакте.

№127-05-2008 08:41:53

dev
Участник
 
Группа: Members
Зарегистрирован: 27-05-2008
Сообщений: 3
UA: Firefox 3.0

[FF3]Вопрос о ContentPolicy

Задача: есть домен для нескольких сайтов которого нужно заменить часть картинок, скриптов и 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 где безболезненно можно подменить юрл?

Отсутствует

 

№227-05-2008 10:59:36

Anton
Участник
 
Группа: Extensions
Откуда: от верблюда
Зарегистрирован: 14-12-2004
Сообщений: 3057
UA: Firefox 2.0
Веб-сайт

Re: [FF3]Вопрос о ContentPolicy

shouldLoad: function(aContentType, aContentLocation, aRequestOrigin, aContext, aMimeTypeGuess, aExtra) {
  ...
  if (aContentLocation == то_что_нужно) {
    aContentLocation = замена;
    ...

Вот прямо так что ли ? Может быть, хотя бы
aContent. location. spec = ....

Вообще интересно, надо попробовать.


Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!

Отсутствует

 

№327-05-2008 11:30:02

dev
Участник
 
Группа: Members
Зарегистрирован: 27-05-2008
Сообщений: 3
UA: Firefox 2.0

Re: [FF3]Вопрос о ContentPolicy

Вот прямо так что ли ? Может быть, хотя бы
aContent. location. spec = ....

Нет, не прямо. Собирается по частям в смысле aContentLocation.scheme = new_scheme; и тд.
И это реально работает до FF3rc1 не смотря на обещанный readonly в доках. (Через .spec тоже само сабой работает). А вот в последнем FF не работает((( И что самое печальное, идей как это обойти у меня нетъ.

Отсутствует

 

№427-05-2008 13:47:21

Anton
Участник
 
Группа: Extensions
Откуда: от верблюда
Зарегистрирован: 14-12-2004
Сообщений: 3057
UA: Firefox 2.0
Веб-сайт

Re: [FF3]Вопрос о ContentPolicy

Результат исправления бага 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ентов на части порвет !!!

Отсутствует

 

№527-05-2008 14:43:20

dev
Участник
 
Группа: Members
Зарегистрирован: 27-05-2008
Сообщений: 3
UA: Firefox 2.0

Re: [FF3]Вопрос о ContentPolicy

Anton пишет

Результат исправления бага 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 то грузим локальную копию.

Отсутствует

 

№627-05-2008 16:49:15

Anton
Участник
 
Группа: Extensions
Откуда: от верблюда
Зарегистрирован: 14-12-2004
Сообщений: 3057
UA: Firefox 2.0
Веб-сайт

Re: [FF3]Вопрос о ContentPolicy

Может я не достаточно четко описал задачу

Достаточно чётко, мне понятно было с самого начала. У меня у самого примерно такая же сейчас, разница лишь в том, что изменить uri я могу, потому что использую нестандартный протокол, но в FF3 это ничего не даёт, так как исправили не один только #337246.

Подменить http протокол, скорее всего, задача нереальная. То есть, свою компоненту @mozilla.org/network/protocol;1?name=http сделать можно, но можно ли её реализовать в чистом javascript (и сколько это потребует кода) или можно ли её связать с дефолтной, чтобы передавать последней не интересующие запросы - это интересные вопросы.

Далее, можно попробовать исследовать http-on-modify-request (который случается перед отправкой запроса) на предмет подмены ему если и не uri, то, может хотя бы потока.

Ещё можно отлавливать уже входящий контент и, если попадётся интересующий, менять ему mime на нестандартный, и в собственном конвертере этого mime делать нужную работу.

Это мои соображения, но, может быть есть ещё какие-нибудь варианты.


Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!

Отсутствует

 

№701-06-2008 14:42:41

Anton
Участник
 
Группа: Extensions
Откуда: от верблюда
Зарегистрирован: 14-12-2004
Сообщений: 3057
UA: Firefox 2.0
Веб-сайт

Re: [FF3]Вопрос о ContentPolicy

Вот такая вот: http://pastebin.mozilla-russia.org/91417 штука, вроде декоратора на стандартный обработчик http-протокола. Работает в FF2 и FF3. Я не проверял, но предполагаю, что при регистрации двух подобных компонент работоспособной будет только одна. Можно попробовать использовать динамическую регистрацию фабрики обработчика, возможно, в этом случае получится полноценный декоратор.


Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!

Отсутствует

 

№801-06-2008 18:03:05

Anton
Участник
 
Группа: Extensions
Откуда: от верблюда
Зарегистрирован: 14-12-2004
Сообщений: 3057
UA: Firefox 2.0
Веб-сайт

Re: [FF3]Вопрос о ContentPolicy

Попробовал сделать динамическую регистрацию двух компонент типа такой: http://pastebin.mozilla-russia.org/91418 но не получилось, работает только одна.


Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!

Отсутствует

 

№924-12-2008 18:56:11

Elexander
Участник
 
Группа: Members
Зарегистрирован: 06-10-2008
Сообщений: 54
UA: Opera 9.6

Re: [FF3]Вопрос о ContentPolicy

Интерестно посмотреть на этот декоратор. Стоит похожая задача. Поделитесь рабочей ссылкой.

Отсутствует

 

№1024-12-2008 22:24:49

Anton
Участник
 
Группа: Extensions
Откуда: от верблюда
Зарегистрирован: 14-12-2004
Сообщений: 3057
UA: Firefox 3.0
Веб-сайт

Re: [FF3]Вопрос о ContentPolicy

Elexander
http://pastebin.mozilla-russia.org/93903 == .../91417
http://pastebin.mozilla-russia.org/93902 == .../91418


Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!

Отсутствует

 

№1125-12-2008 16:50:41

Elexander
Участник
 
Группа: Members
Зарегистрирован: 06-10-2008
Сообщений: 54
UA: Opera 9.6

Re: [FF3]Вопрос о ContentPolicy

Спасибо, 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)

Отсутствует

 

№1225-12-2008 18:39:42

Anton
Участник
 
Группа: Extensions
Откуда: от верблюда
Зарегистрирован: 14-12-2004
Сообщений: 3057
UA: Firefox 3.0
Веб-сайт

Re: [FF3]Вопрос о ContentPolicy

Или все же есть? Прошло 6 месяцев с момента обсуждения. Есть ли какие-то находки? Как вы справились с задачей?

Вполне возможно, что есть. Я бы посмотрел в сторону блокировщиков - ilo, adblock и т. д., но у меня такая задача не стоит.


Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!

Отсутствует

 

Board footer

Powered by PunBB
Modified by Mozilla Russia
Copyright © 2004–2020 Mozilla Russia GitHub mark
Язык отображения форума: [Русский] [English]