ILO: currentURI.spec
Решил посмотреть как 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, альфы пока что не было.