ILO: currentURI.spec

6th May 2005 - 17:11

Решил посмотреть как ILO работает в ночных сборках Firefox. Как оказалось, достаточно было переписать пару моментов и всё заработало, однако… Иногда у меня возникает чувство, что в MoFo есть некий доброволец, специально ставящий палки в колёса этого расширения. Фанат Оперы, наверное.

Загрузкой элементов рулит метод shouldLoad интерфейса nsIContentPolicy, о котором я уже немного писал. Если бы при отработке запроса можно было бы просто вернуть true или false, всё было бы чудесно, но, жизнь была бы скучна, не так ли (ух, как много «бы»)? Скажем, когда при отключенных картинках в «голом» Firefox у вас исчезают отступы тредов в ЖЖ, или вы видите инлайн-текст alt’ов, или чувствуете, что «где-то здесь должна быть картинка», а её нет, то это как раз результат возврата false. Отрисовка, которая учитывала бы указанные размеры изображения, не производится. Для борьбы с таким поведением в своё время пришлось поломать голову и я пришёл к достаточно замороченой логике, в основе которой лежит подмена/обнуление contentLocation.spec. Если графический элемент был заблокирован, то этот самый spec у него будет null. src же остаётся на месте, его не трогаем.

Качаю trunk, ставлю ILO, загружаю страницу, контекстное меню на заблокированных картинках появляется без пунктов «Load image», «View image» и т.д. Лезу в код, смотрю отличия:

Windows; en-US; rv:1.7.7; Gecko/20050414 Firefox/1.0.3
Prototype for nsContextMenu (browser.js, line 3592):

// See if the user clicked on an image.
if ( this.target.nodeType == Node.ELEMENT_NODE ) {
     if ( this.target.localName.toUpperCase() == "IMG" ) {
        this.onImage = true;
        this.imageURL = this.target.src;

Windows; en-US; rv:1.8b2; Gecko/20050505 Firefox/1.0+
Prototype for nsContextMenu (browser.js, line 3790):

// See if the user clicked on an image.
if ( this.target.nodeType == Node.ELEMENT_NODE ) {
     if ( this.target instanceof Components.interfaces.nsIImageLoadingContent &&
          this.target.currentURI != null ) {
        this.onImage = true;
        this.imageURL = this.target.currentURI.spec;

Мне не остаётся ничего другого, кроме как сделать

eval('nsContextMenu.prototype.setTarget = ' +
        nsContextMenu.prototype.setTarget.toString()
            .replace(/this\.target\.currentURI(\.spec)?/g, 'this.target.src'));

, скрестить пальцы, надеяться на то, что такое заигрывание с браузером не проявит себя где-нибудь потом в не самом лучшем виде, и параллельно искать альтернативный путь вклинивания в отрисовку блокируемых элементов.

PS. Интересно, с чем я столкнусь в следующих сборках?

PPS. Кстати, советую пока что воздержаться от скачивания последних транков, во всяком случае, под Windows. Сборка 20050430 вроде как нормально работает, а вот вчерашняя 20050505 — не очень.

Categories: dHtml | comments: (8)

Комментарии

1. Остап Бредю 6th May 2005 - 18:44

>Фанат Оперы, наверное.

Призрак Оперы!

2. BOLK 7th May 2005 - 12:40

Всё, я обратно фанат Maxthon. По крайней мере под FireFox не стабилизируется по-настоящему.

Mash:

Немного не понял что именно «не стабилизируется»… впрочем, это не важно. :) Я и сам Firefox не шибко пользую, больше Оперой хожу. Каждому своё.

3. BOLK 7th May 2005 - 13:54

как минимум — API. Когда плагины отваливаются от версии к версии пачками — в этом хорошего мало.

Mash:

Как уже заметили ниже, «ночные сборки» — это не версия. Альфу на днях грозятся выпустить, а существенные изменения следует ожидать, думаю, ближе к beta. Выйдет релиз — можно будет делать выводы.

С другой стороны, я вообще не верю в любые продукты с версией 1.0. Применительно к Firefox убедился на личном опыте.

Как разработчика — устраивает во всём; как пользователя — есть, извиняюсь, откровенно говновые моменты.

4. sp 7th May 2005 - 15:30

BOLK, не от версии к версии, а от nightly build’а к nightly build’у.
Разница, на мой взгляд, более чем существенная.

Mash:

А уж какая существенная разница будет между 1.0 и 1.1!

5. Остап Бредю 7th May 2005 - 18:03

А может, вам стоит переименовать расширение в IM[ages]F[rom]O[pera]?

Mash:

Забавно. Уже нет.

6. --- 7th May 2005 - 18:44

sp, плагины отваливаются от версии к версии.
от nightly build`а к nightly build`у меняется API.

7. sp 9th May 2005 - 19:58

Все проблемы от девелопера в голове, норовящего схватить чего посвежее *).
Надо пользовать официально вышедшую версию, и никаких проблем не будет, сплошное удовольствие *).

Mash:

Вся проблема в том, что скорее всего большая часть этих изменений войдёт в 1.1. Уже сейчас я очень хорошо споткнулся на паре мест. Вполне возможно, что было бы проще сложить руки в ожидании релиза, а потом почитать на форумах разработчиков о том, с какими проблемами они столкнулись и как обойти больные места, но…

А вот пользователям точно не стоит гоняться за такими версиями. Лучше дождаться релиза и даже потом немного подождать. ;)

8. O.B. 15th May 2005 - 04:47

Последняя ночная сборка — от 12-го, а сейчас 14-е (точнее — уже 15-е). Так нужно понимать, что это и есть Deer Park 1.1 alpha?

Mash:

«Последняя» ночная сборка существует лишь на текущее число.

О планах MoFo ничего сказать не могу, но, AFAIK, альфы пока что не было.

Комментарии временно отключены.