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

Хотите узнать больше о расширениях? Посмотрите ролики, рассказывающие о работе с расширениями Firefox.

№2605-12-2006 15:57:16

Dark-Demon
Участник
 
Группа: Members
Зарегистрирован: 20-02-2006
Сообщений: 1278

Re: Разработка Сustom Buttons

Yan, дык если эти кнопки установить твоим расширением, то они работают нормально....


!

Отсутствует

 

№2705-12-2006 16:16:37

Yan
Участник
 
Группа: Extensions
Откуда: Москва
Зарегистрирован: 27-02-2005
Сообщений: 1019

Re: Разработка Сustom Buttons

В версии 0.0.1.3 я сделал, чтобы при нажатии на кнопку проверялось, есть ли метод bind у Function, и если нет -- то он заново инициализируется.

Отредактировано Yan (05-12-2006 16:19:00)

Отсутствует

 

№2806-12-2006 11:50:42

Dark-Demon
Участник
 
Группа: Members
Зарегистрирован: 20-02-2006
Сообщений: 1278

Re: Разработка Сustom Buttons

Yan, вотъ! я тоже так делаю. я просто добавляю твой код в начало инициализации.

например:

Выделить код

Код:

<content label="Image show-hide" image="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAA3NCSVQICAjb4U/gAAAAD1BMVEUfact50/fF+v/M//////8mt18DAAAABXRSTlP/////APu2DlMAAAAJcEhZcwAACvAAAArwAUKsNJgAAAAgdEVYdFNvZnR3YXJlAE1hY3JvbWVkaWEgRmlyZXdvcmtzIE1Yu5EqJAAAADhJREFUeJxjcHFgAAIXFwYXB2NjYwYWEMNQUJCZAcYwYIEwGBigDEFhDIYQ+QygpUZKIAbIGQwsANX+EGaBLn8yAAAAAElFTkSuQmCC">
	<xul:toolbarbutton xbl:inherits="label,image" />
</content>

<implementation>
	<constructor>
		<![CDATA[

if ((typeof Function.prototype.bind)=="undefined")
{
	Function.prototype.bind= function(object)
	{
		var method = this;
		return function()
		{
			return method.apply(object, arguments);
		};
	};
};

this.pref='permissions.default.image';
this.setState=function(){
	switch(this.PS.getIntPref(this.pref))
	{
	case 1:
		this.image= 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAFo9M/3AAAACXBIWXMAAAsSAAALEgHS3X78AAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAACp0lEQVR42mL4//8/g3zm6f8AAcQAYvz4uuc/QACBeSAOQAAx/P75/X/ukY//AQIILHXhz///lZe//wfJAgQQWOBui9D/P78t/6ftffcfIIAYYKbA9AIEEIjDWnPtx3+YIEAAMXz7/P7/75+v/mcADQQJAAQQ0HTt/y9nqv73W/caLAAQQDAzWC8CbWq89et//fWf/5HNBAgguIJzIKdc+v6/7Py3/8Wnv/wvPPkZrAgggMAKfv+c8P/f+8r//x+mAZ03/X/g5nf/sw68BysACCCIH78p///zSeb/n4ci/39d4P+/4+f//0d//QcrAAggFH8gY5A4CAMEEFxB0+1f/xtu/vxfc+X7f5CDYYoAAgiuoP7Gz//VV378r7j4HdkkVoAAgisA6Sy/8O1/ydmvYB+c+g02hRUggBgaw6T+g4Iegq//B/Fzj376fwLiSFaAAAIr+HI17f//l4X//9+JAyvIPPjh/3GoAoAAAit4MEns/71Gof+f1hmCFaQCownqTVaAAAIr+PNb4f+fFxL//9wUACsAScIUAAQQA8y/IA7IsSAvgvAFKD4PxdjCCIQBAgjDgAvQSK0DRmrtNWDQXAUFzTewxjNAn5/8/R/FIIAAwjAAZFsdMEFVAcMUFPkgzaAEUAoKvlOfkYMQ7AWAAAJrBvmLEC4Aasw/DsTHPiG7ghUggOAG/PkFTCG/p/3//6P///+PLf//vwamrsc5///+WQc2IHLX+//Zhz/+zz4EjwKwAQABBDfg90/d/w+mSvx/DEztPy+G//9/K/r//6vBwBhoBhvgv/HN//T97/9n7Hv//xiSAQABhDDgl8b/B33C/++3C/6/38T//34d7//7Vdz//0Kjzm/dq/9pe979T939Fp6UQQYABBDRYSAZdghrkgcIMAD5xMj+kGsEXgAAAABJRU5ErkJggg==';
		this.tooltipText= 'load all images';
	 	break;
	case 2:
		this.image=
'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAA3NCSVQICAjb4U/gAAAAD1BMVEUfact50/fF+v/M//////8mt18DAAAABXRSTlP/////APu2DlMAAAAJcEhZcwAACvAAAArwAUKsNJgAAAAgdEVYdFNvZnR3YXJlAE1hY3JvbWVkaWEgRmlyZXdvcmtzIE1Yu5EqJAAAADhJREFUeJxjcHFgAAIXFwYXB2NjYwYWEMNQUJCZAcYwYIEwGBigDEFhDIYQ+QygpUZKIAbIGQwsANX+EGaBLn8yAAAAAElFTkSuQmCC';
		this.tooltipText= 'don\'t load any images';
		break;
	case 3: 
		this.image=
'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAFo9M/3AAAACXBIWXMAAAsSAAALEgHS3X78AAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAACdklEQVR42mL4//8/g3zm6f8AAcQAYvz69es/QACBeSAOQAAx/Pnz5//Z20/+AwQQWOrHv///n7x89R8kCxBAYIEuXdb/f//+/X/w8oP/AAHEADMFphcggEAc1pdv3vyHCQIEEMPPnz//gwy8dPcpWAAggMCmnzp16v+Rqw/BAgABBDOD9RfQpncf3v1/9RahHSQHEEBwBd+BCh4DnXLv6Yv/Nx89/3/l/jOwIoAAAisAGXv9+vX/MOedvvn4//Frj8AKAAII7keQBAj//v37//M///8/+/0frAAggFD8gYxB4iAMEEBwBR8+vvv/5v1bYJC8/v/733+4IoAAgit4/e7t/+evX/9/9OIVskmsAAEEV/D01ev/D56//H/78Yv/1x48+//uD9gUVoAAYlizZg04pGAYxD8PjIbXUAUAAQRWMMmA9f+VK1f+dwK9CeKfuP7o/0uoAoAAAivo02f9f+7cuf9tOhAFh4DR9BziTVaAAAIrgIUBCIP4IEloOLACBBADzL8gDsixIC+C4uUnFP+AYmxhBMIAAYRhwE9wpL79/wYYLKCIfQEMmofPIUHz6e///2///EcxCCCAMAwA2fYCmKCeATWC0uFDYNDdf/by/50nL/5fBQbf5ftP/7//CzeEFSCAwJpB/iKErwJTz6V7T/9fBCZMJFewAgQQ3ABQAE0BBjcoyCcAQxUUsj16rP///fsHNuAcMG7OAFPZqRuP/79CMgAggOAGgCIRpBEUX6BkCYqWDh1WeMiD4u4oMBeAcsILJAMAAgjFgF6gjSDNII2gOG3RRhhw+MrD/wcvPfi//+J9eFIGGQAQQESHAa4kDxBgAMjdAQviliYiAAAAAElFTkSuQmCC';
		this.tooltipText= 'load images only from this domain';
		break;
	}
}

this.PS=
 Components.classes['@mozilla.org/preferences-service;1']
 .getService(Components.interfaces.nsIPrefBranch);
this.ob={};
this.ob.observe=this.setState.bind(this);
this.PS.addObserver(this.pref,this.ob,false);
this.setState();

		]]>
	</constructor>
</implementation>

<handlers>
	<handler event="click" button="0" modifiers="any">
		<![CDATA[

switch(this.PS.getIntPref(this.pref)){
	case 1: this.PS.setIntPref(this.pref,2);break;
	case 2: this.PS.setIntPref(this.pref,3);break;
	case 3: this.PS.setIntPref(this.pref,1);break;
}

		]]>
	</handler>
</handlers>

Отредактировано Dark-Demon (06-12-2006 12:02:04)


!

Отсутствует

 

№2906-12-2006 14:07:21

Yan
Участник
 
Группа: Extensions
Откуда: Москва
Зарегистрирован: 27-02-2005
Сообщений: 1019

Re: Разработка Сustom Buttons

Dark-Demon
Если честно -- влом даже разбираться, т.к. в 2.0.0.1 всё равно поправят, и я этот хак из след. версий уберу.
Ты бы лучше другие баги ковырял, коих немало. Например, добавил я в user.js:

user_pref("nglayout.debug.disable_xul_cache",true);
user_pref("javascript.options.showInConsole", true);
user_pref("javascript.options.strict", true);
user_pref("browser.dom.window.dump.enabled", true);

И при последующем запуске все твои кнопки перестали инициализироваться. В панели они есть (проверил через DOM-инспектор), а их не видно. (После этого мне и стало влом разбираться, куда bind пропал.)
И перезапускать браузер при каждом изменении кнопки -- это никуда не годится.
С юзабилити проблемы большие..

Отсутствует

 

№3006-12-2006 16:22:07

Dark-Demon
Участник
 
Группа: Members
Зарегистрирован: 20-02-2006
Сообщений: 1278

Re: Разработка Сustom Buttons

В панели они есть (проверил через DOM-инспектор), а их не видно.

ты ставил кнопки с моего сайта? или кастомкнопки?

И перезапускать браузер при каждом изменении кнопки -- это никуда не годится.

изменять можно не перезагружая, удалять уже тоже, но я эту версию ещё не выложил. вот с добавление - коряга. :(

Ты бы лучше другие баги ковырял, коих немало.

а ты strict отруби и ни одного не останется ;)

Отредактировано Dark-Demon (06-12-2006 16:24:09)


!

Отсутствует

 

№3111-12-2006 16:25:33

Dark-Demon
Участник
 
Группа: Members
Зарегистрирован: 20-02-2006
Сообщений: 1278

Re: Разработка Сustom Buttons

что-то addons.mozilla.org не хочет кушать моё расширение :(
а когда выходит версия 2.0.0.1?


!

Отсутствует

 

№3211-12-2006 17:52:18

Yan
Участник
 
Группа: Extensions
Откуда: Москва
Зарегистрирован: 27-02-2005
Сообщений: 1019

Re: Разработка Сustom Buttons

Чёрт, опять не заметил твоё сообщение от 6 декабря.

ты ставил кнопки с моего сайта? или кастомкнопки?

С твоего сайта.

...вот с добавление - коряга.

Это вроде как основная функция. :)

а ты strict отруби и ни одного не останется wink

Не понял. Как strict мешает работе расширения?

что-то addons.mozilla.org не хочет кушать моё расширение sad
а когда выходит версия 2.0.0.1?

Не знаю.

Отсутствует

 

№3312-12-2006 12:29:22

Dark-Demon
Участник
 
Группа: Members
Зарегистрирован: 20-02-2006
Сообщений: 1278

Re: Разработка Сustom Buttons

Yan, strict никак не мешает работе, просто засоряет консоль.


!

Отсутствует

 

№3410-07-2007 00:50:22

Dark-Demon
Участник
 
Группа: Members
Зарегистрирован: 20-02-2006
Сообщений: 1278
UA: Firefox 2.0

Re: Разработка Сustom Buttons

ввиду того, что старое моё расширение под третьей лисицей не заработало, да и редактор давно уже хотел дописать сделал новую версию:
http://dark-demon.nm.ru/soft/customitem … ems3a1.xpi
тестировал под фф 3.0а6
после установки расширения в палитре можно найти демонстрационную кнопку. другие адаптированные под новую версию расширения кнопки можно найти тут: http://dark-demon.nm.ru/soft/customitems3/

из нововведений:
возможность перегружать стандартные кнопки
новый редактор с разделением всех xbl сущностей

особенности:
после добавления новой кнопки требуется перезагрузка %-\
убрал наследование, возможно потом верну

скриншот

Отредактировано Dark-Demon (10-07-2007 01:02:49)


!

Отсутствует

 

№3508-08-2009 19:12:26

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

Re: Разработка Сustom Buttons

Подниму-ка я тему. =)

Во-первых, нужна ли вообще настройка на скрытие кнопки «применить» в редакторе? Пусть она всегда видна будет, не мешает же.
Во-вторых, чисто визуально лучше смотрится, когда после нажатия видно, что «сохранилось» – т.е. кнопка становится неактивной.

Относительно универсальная схема примерно такая:

Выделить код

Код:

<dialog
onchange="changed(event);"
oncommand="changed(event);"
oninput="changed(event);"
ondragexit="changed(event);"

С ondragexit не совсем хорошо, я пару раз пытался выявлять факт перетаскивания текста иначе, но результатов не добился. :sick:

Далее два варианта.
1. Просто проверять event.target.localName и если, например, это не "tab", включать кнопку.
2. При каждой загрузке настроек и при каждом сохранении пробегать по всем (сохраняемым) элементам, и записывать их состояние (которое уже сохранено) в атрибут:
checked="true" -> saved_checked="true"
value="qqq" (точнее, свойство value) -> saved_value="qqq"
А в changed(event), соответственно, проверять, изменилось ли.

Самый точный вариант, но и самый медленный, если может быть большой текст (а он может).


Ну, и преимущество в том, что код мало зависит от структуры XUL и от того, как реализовано чтение/сохранение настроек.

P.S. И все же «Показывать кнопку "Применить" в редакторе кода», а не «Отобразить кнопку "Применить" в редакторе кода». Последнее больше применимо к однократному действию.


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

Отсутствует

 

№3608-08-2009 22:34:15

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

Re: Разработка Сustom Buttons

Во-первых, нужна ли вообще настройка на скрытие кнопки «применить» в редакторе? Пусть она всегда видна будет, не мешает же.

Если писать сразу в кнопку, то она будет пересоздаваться и инициализироваться при каждой записи.
А для отложенной записи нет инфраструктуры.

Во-вторых, чисто визуально лучше смотрится, когда после нажатия видно, что «сохранилось» – т.е. кнопка становится неактивной.

Относительно универсальная схема примерно такая:

Кажется, есть вариант попроще. nsIEditorObserver на редактор + анализ transactionManager. numberOfUndoItems


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

Отсутствует

 

№3709-08-2009 00:41:04

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

Re: Разработка Сustom Buttons

Anton пишет

Если писать сразу в кнопку, то она будет пересоздаваться и инициализироваться при каждой записи.

В основном сохранение нужно на случай, если выполненный по F9 код тем или иным образом не даст сохраниться.
А инициализацию можно запускать только если окно редактора теряет фокус.

Anton пишет

Кажется, есть вариант попроще. nsIEditorObserver на редактор + анализ transactionManager. numberOfUndoItems

Три редактора, два текстовых поля + хоткей, два чекбокса. И это после не особо внимательного осмотра.
Хотя если хочется точно знать, сохранено ли текущее состояние (скажем, если пользователь отменил все изменения), может, и проще.
И то наличие отмен не сильно связано с сохраненностью текста.


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

Отсутствует

 

№3812-08-2009 02:04:50

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

Re: Разработка Сustom Buttons

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

Выделить код

Код:

function x() {
    // some comment
    ...

Методика лечения примерно такая:

Выделить код

Код:

if(/^\s*\/\//m.test(block))
	block = block.replace(/^(\s*)\/\//mg, "$1");
else
	block = block.replace(/^/mg, "//");

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

Отсутствует

 

№3912-08-2009 20:31:14

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

Re: Разработка Сustom Buttons

Infocatcher пишет

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

Это не баг.
Ответственная за это функция предназначена для установки комментариев в начало строки и снятия их оттуда же.
Комментарии внутри строки имеют приоритет.


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

Отсутствует

 

№4012-08-2009 21:29:14

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

Re: Разработка Сustom Buttons

Удобнее, что ли, хм. Надо будет последить, что нужно чаще.
Разве что снимать «внутренние» комментарии при таком подходе неудобно.


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

Отсутствует

 

№4113-08-2009 22:47:20

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

Re: Разработка Сustom Buttons

http://forum.mozilla-russia.org/viewtop … 82#p364082
https://www.mozdev.org/bugs/show_bug.cgi?id=21391

Что вообще дает добавление оверлея через свой протокол кроме запрета кэширования?
Вроде как, там проблема в том, что компонента запускается позже, чем читается chrome.manifest. Так вот, может, есть смысл делать document.loadOverlay() после load/DOMContentLoaded окна или просто из подключенного к обычному оверлею скрипта?

Добавлено 13-08-2009 23:09:01
Хм, как-то странно оно себя ведет. По-моему, что-то не так с компонентой, реализующей протокол.


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

Отсутствует

 

№4214-08-2009 18:56:13

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

Re: Разработка Сustom Buttons

Что вообще дает добавление оверлея через свой протокол кроме запрета кэширования?

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

Так вот, может, есть смысл делать document.loadOverlay() после load/DOMContentLoaded окна или просто из подключенного к обычному оверлею скрипта?

Если надо "перекрывать" toolbarpalette это не будет работать.

Хм, как-то странно оно себя ведет. По-моему, что-то не так с компонентой, реализующей протокол.

И что же с ней "не так" ?


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

Отсутствует

 

№4314-08-2009 21:02:17

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

Re: Разработка Сustom Buttons

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

Кроме версий js это сейчас для чего-нибудь используется?

Если надо "перекрывать" toolbarpalette это не будет работать.

А когда подключается toolbarpalette?

И что же с ней "не так" ?

Ммм... она не работает. :D
А если серьезно, не знаю. Или что-то глобально не так с оверлеями по своему протоколу, раз идут глюки из-за того, что другое расширение меняет момент загрузки своих скриптов, или что-то не так в реализации протокола. Или баг в Firefox, наконец.
И можно ведь у автора ABP спросить, глядишь, присоветует чего.


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

Отсутствует

 

№4414-08-2009 21:18:05

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

Re: Разработка Сustom Buttons

Кроме версий js это сейчас для чего-нибудь используется?

Пока нет.

А когда подключается toolbarpalette?

Конструктор toolbox'а его удаляет из документа.

Ммм... она не работает. :D

Она-то как раз работает. Не работает chrome.manifest.

или что-то не так в реализации протокола.

Всё так.

И можно ведь у автора ABP спросить, глядишь, присоветует чего.

Уже посоветовал, за что я ему весьма благодарен. Оверлей с кнопками будет загружаться из resource://, селектор версий js - по-прежнему из custtombuttons://, но через loadOverlay (...)


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

Отсутствует

 

№4514-08-2009 22:17:54

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

Re: Разработка Сustom Buttons

Пока нет.

В том смысле, что есть планы использовать изменение контента, загружаемого по своему протоколу, для чего-то еще или просто может пригодиться?
И я не совсем понял, как проявляется баг, из-за которого нужно «руками» указывать версию js. Т.е. нельзя ли решить эту проблему не через одно место?

Конструктор toolbox'а его удаляет из документа.

До того, как запустятся скрипты расширений, так?
Тут, по идее, может помочь компонента навроде userChromeJS, если, конечно, есть подходящее событие, по которому можно запускаться.

Она-то как раз работает. Не работает chrome.manifest.

Т.е. это баг в реализации chrome.manifest?

или что-то не так в реализации протокола.

Всё так.

Тебе видней. =) Тем не менее, не стоило это исключать без веских оснований, а у меня их не было.

Уже посоветовал, за что я ему весьма благодарен. Оверлей с кнопками будет загружаться из resource://, селектор версий js - по-прежнему из custtombuttons://, но через loadOverlay (...)

Не совсем понимаю, что дает resource://, он что, тоже не кэшируется или можно сделать, чтобы не кэшировался?


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

Отсутствует

 

№4615-08-2009 01:16:32

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

Re: Разработка Сustom Buttons

Т.е. нельзя ли решить эту проблему не через одно место?

Без динамической подмены версии js как раз и будет "через одно место" - лишние записи в chrome.manifest, несколько оверлеев, слегка отличающихся только значением атрибута type. Это при том, что в chrome.manifest нет флага для platformversion.

Тут, по идее, может помочь компонента навроде userChromeJS, если, конечно, есть подходящее событие, по которому можно запускаться.

Это значит, надо поставить observer на domwindowopened, когда он "поймает" окно, проверить, нужное ли это окно, поставить на окно обработчик некоего события, дождаться срабатывания обработчика и загрузить оверлей.
И ещё неизвестно, решит это проблему, или нет.

Т.е. это баг в реализации chrome.manifest?

Я разве что-нибудь говорил про "баг в реализации chrome.manifest" ?

Тебе видней. =) Тем не менее, не стоило это исключать без веских оснований, а у меня их не было.

Мдя... Ну я то ведь думал, что у тебя есть какие-то веские основания, раз ты это озвучиваешь.

что дает resource://, он что, тоже не кэшируется

Да, оверлеи через resource:// не кэшируются.


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

Отсутствует

 

№4715-08-2009 01:55:42

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

Re: Разработка Сustom Buttons

Anton пишет

Без динамической подмены версии js как раз и будет "через одно место" - лишние записи в chrome.manifest, несколько оверлеев, слегка отличающихся только значением атрибута type. Это при том, что в chrome.manifest нет флага для platformversion.

Однако я могу подключить скрипт без указания версии js, содержащий

Выделить код

Код:

let x = 5;
alert(x);

, и он будет работать.
И

Выделить код

Код:

new Function("let x = 5; alert(x);")();

будет работать.
Нельзя ли переместить методы для выполнения кода кнопок туда, откуда они будут работать без уточнения версии?

И ещё неизвестно, решит это проблему, или нет.

Если оверлей через resource:// решает проблему, нет смысла и проверять, понятно, что так сложнее.
Только можно ли при этом будет поставить CB в виде глобального расширения? Или будет использоваться что-то хитрее, чем
resource custombuttons-profile ../../custombuttons/
?

Хотя нет, еще же где-то должна определиться версия js. =/

Я разве что-нибудь говорил про "баг в реализации chrome.manifest" ?

А я и не утверждаю, что ты говорил. Но ведь баг есть. И он где-то находится. Так вот, где баг?

Мдя... Ну я то ведь думал, что у тебя есть какие-то веские основания, раз ты это озвучиваешь.

Я сказал, что «по-моему». К тому же, проявлялось все это довольно-таки странно. Например, у меня почему-то вываливалось исключение на document.loadOverlay() при использовании custombutton-протокола и при том, что в chrome.manifest все строки с custombutton:// были закомментированы.


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

Отсутствует

 

№4815-08-2009 02:15:20

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

Re: Разработка Сustom Buttons

Однако я могу подключить скрипт без указания версии js, содержащий

2.0, xbl вызывает что-нибудь из скрипта, загруженного без указания версии.

А я и не утверждаю, что ты говорил. Но ведь баг есть. И он где-то находится. Так вот, где баг?

Я же сказал: не работает chrome.manifest

Infocatcher пишет

Например, у меня почему-то вываливалось исключение на document.loadOverlay() при использовании custombutton-протокола и при том, что в chrome.manifest все строки с custombutton:// были закомментированы.

При каких условиях ?


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

Отсутствует

 

№4915-08-2009 03:09:33

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

Re: Разработка Сustom Buttons

2.0, xbl вызывает что-нибудь из скрипта, загруженного без указания версии.

Н-ну, пусть xbl оповещает наблюдателя, что нужно выполнить код такой-то кнопки.

Я же сказал: не работает chrome.manifest

Это уже вопрос терминологии. Если что-то не работает, то или так и задумано, или это баг.

При каких условиях ?

Тот код не сохранился, потому как не давал нужного результата... =(
И еще может влиять наличие/отсутствие/установка ABP.

Пока пытался воспроизвести, убил все расширения:

Выделить код

Код:

## Firefox

overlay chrome://browser/content/browser.xul chrome://custombuttons/content/test.xul

overlay chrome://browser/content/browser.xul chrome://custombuttons/content/overlay.xul
#   overlay chrome://browser/content/browser.xul custombuttons://content/buttonsoverlay.xul

## Browser
#   overlay chrome://browser/content/browser.xul custombuttons://content/cbbutton.xul
overlay chrome://global/content/customizeToolbar.xul custombuttons://content/cbbutton.xul

test.xul:

Выделить код

Код:

<?xml version="1.0"?>
<overlay xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
	<script type="application/x-javascript">
	<![CDATA[

	document.loadOverlay("custombuttons://content/buttonsoverlay.xul", null);
	document.loadOverlay("custombuttons://content/cbbutton.xul", null);

	]]>
	</script>
</overlay>

А

Выделить код

Код:

window.addEventListener("load", function(e) {
	document.loadOverlay("custombuttons://content/buttonsoverlay.xul", null);
	document.loadOverlay("custombuttons://content/cbbutton.xul", null);
}, false);

тупо не дает никакого эффекта.

Правда, это все без установленного ABP.

А при установке ABP плюс

Выделить код

Код:

setTimeout(function() {
	document.loadOverlay("custombuttons://content/buttonsoverlay.xul", null);
	document.loadOverlay("custombuttons://content/cbbutton.xul", null);
}, 1000);

Firefox вообще падает при запуске. о_О
Закомментировал setTimeout и далее, тогда запустился.

Заодно нашел в userChromeJS коммент про https://bugzilla.mozilla.org/show_bug.cgi?id=330458.

Отредактировано Infocatcher (15-08-2009 03:14:21)


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

Отсутствует

 

№5015-08-2009 03:44:17

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

Re: Разработка Сustom Buttons

Н-ну, пусть xbl оповещает наблюдателя, что нужно выполнить код такой-то кнопки.

Эта идея требует тщательного обдумывания.
Может быть, когда-нибудь потом, но не сейчас.

Это уже вопрос терминологии.

Первоначальный вопрос, напомню, был "Что не так с компонентой" : )

Firefox вообще падает при запуске. о_О

Наверное, если поставить observer вместо null, который будет загружать следующий оверлей, падать не будет.


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

Отсутствует

 

Board footer

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