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

Mozilla Россия — свежие версии программ Mozilla, а также масса полезной информации по каждому продукту.

№129-04-2014 17:39:04

f00fc7c8
Участник
 
Группа: Members
Зарегистрирован: 02-10-2009
Сообщений: 668
UA: Firefox 29.0

ShouldLoad и редирект.

Господа, приветствую.

Проблема следующая: есть адд-онс Redirector, который тыщу лет не поддерживается и не будет, и есть в нём такая вещь:

// nsIContentPolicy implementation
shouldLoad: function(contentType, contentLocation, requestOrigin, aContext, mimeTypeGuess, extra) {
...
aContext.loadURI(redirectUrl, requestOrigin, null);
return Ci.nsIContentPolicy.REJECT_REQUEST;
}

Вот на этом LoadURI хренеет TabMixPlus и, при вызове ссылки с внешнего приложения, генерирует и заполняет лишнюю вкладку, если активная вкладка - пустая. Копаться в дебрях TMP нет никакого желания, активной реакции на багрепорт - тоже не видно, посему хотелось бы поправить Redirector. Попробовал тупо воткнуть  вместо этих двух строк

contentLocation.spec=redirectUrl;
return Ci.nsIContentPolicy.ACCEPT;

Работает. Но это идеологически неверно же, остальные поля в contentLocation все заполнить нельзя, часть ридонли. А попытка написать "contentLocation=IOService.newURI(redirectUrl,contentLocation.originCharset,null);" срабатывает только один раз на один URL, после чего, видимо, что-то кэшируется и редирект больше не происходит.

Может кто-то подскажет какой то ещё вариант подмены URL в ShouldLoad? Или иное, несложное, решение.

Отсутствует

 

№229-04-2014 19:09:07

Infocatcher
Not found
 
Группа: Extensions
Зарегистрирован: 24-05-2007
Сообщений: 4339
UA: Firefox 28.0

Re: ShouldLoad и редирект.

Можно попробовать использовать nsIHttpChannel.redirectTo(). Но придется переписать логику... Вот пример: https://gist.github.com/Infocatcher/9523286

А применительно к Tab Mix Plus – смотря что там переопределяется – loadURI() или loadURIWithFlags().
Например, у <browser>'а вот так:
chrome://global/content/bindings/browser.xml#browser

Выделить код

Код:

<method name="loadURI">
        <parameter name="aURI"/>
        <parameter name="aReferrerURI"/>
        <parameter name="aCharset"/>
        <body>
          <![CDATA[
            const nsIWebNavigation = Components.interfaces.nsIWebNavigation;
            const flags = nsIWebNavigation.LOAD_FLAGS_NONE;
            this.loadURIWithFlags(aURI, flags, aReferrerURI, aCharset);
          ]]>
        </body>
      </method>

Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела

Отсутствует

 

№329-04-2014 22:05:51

f00fc7c8
Участник
 
Группа: Members
Зарегистрирован: 02-10-2009
Сообщений: 668
UA: Firefox 29.0

Re: ShouldLoad и редирект.

Infocatcher пишет

Можно попробовать использовать nsIHttpChannel.redirectTo(). Но придется переписать логику...

Спасибо, гляну. Вопрос в том, действительно ли это "несложное" решение.. :) А логики никакой особой в Редиректоре и нет. Там вся суть редиректа ровно вот в loadURI по ShouldLoad, остальное сплошная работа собственно с регекспами, UI и собственным конфигом. Просто ТабМикс дважды умудряется запустить загрузку таба.

Infocatcher пишет

применительно к Tab Mix Plus – смотря что там переопределяется – loadURI() или loadURIWithFlags().

Если б там что-то одно переопределялась - я б с него и начал. Там дохрена хаков внутренних функций. Из-за опции single window mode они вглубь тянутся, вплоть до того, что считается пустым табом, похоже..

Отсутствует

 

№429-04-2014 23:01:13

Infocatcher
Not found
 
Группа: Extensions
Зарегистрирован: 24-05-2007
Сообщений: 4339
UA: Firefox 28.0

Re: ShouldLoad и редирект.

f00fc7c8 пишет

Там вся суть редиректа ровно вот в loadURI по ShouldLoad

Там еще перенаправления отслеживаются (и сравниваются с правилами).

f00fc7c8 пишет

Если б там что-то одно переопределялась

Я к тому, что можно попробовать вызывать из Redirector'а не loadURI(), а loadURIWithFlags().
И можно попробовать вместо nsIWebNavigation.LOAD_FLAGS_NONE передавать что-нибудь другое, на что Tab Mix Plus не будет реагировать.


Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела

Отсутствует

 

№529-04-2014 23:21:25

f00fc7c8
Участник
 
Группа: Members
Зарегистрирован: 02-10-2009
Сообщений: 668
UA: Firefox 29.0

Re: ShouldLoad и редирект.

Infocatcher пишет

Я к тому, что можно попробовать вызывать из Redirector'а не loadURI(), а loadURIWithFlags().И можно попробовать вместо nsIWebNavigation.LOAD_FLAGS_NONE передавать что-нибудь другое, на что Tab Mix Plus не будет реагировать.

Первое - пробовал, второе - нет.. попробую, если первый мой метод глючить будет.
А сейчас я почитал внимательнее про spec в nsURI: "Returns a string representation of the URI. Setting the spec causes the new spec to be parsed using the rules for the scheme the URI currently has. If the string cannot be parsed as a URI, NS_ERROR_MALFORMED_URI thrown." Потом сделал дамп contentLocation до и после замены спека. Вроде всё действительно само распарсивается и ложится в нужные поля, так что пусть пока так и остаётся. Будет глючить - буду думать дальше :) Спасибо ещё раз!

Отсутствует

 

Board footer

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