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

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

№106-01-2009 05:52:38

zencd
Участник
 
Группа: Members
Зарегистрирован: 09-07-2008
Сообщений: 60
UA: Firefox 3.0

Разработка расширения без перезагрузки лисы — моя версия

Написал экстеншн для лёгкого начала разработки, прототипирования:

http://zencd.spb.ru/ext/restartless.xpi

Что делает:
— загружает динамически все субскрипты по маске *.js из директории «%firefoxprofile%/restartless-development»,
— делает это в момент, когда браузер уже полностью загружен: window.addEventListener('load', ...),
— добавляет пункт меню «Tools/Reload Restartless Development scripts» по которому старые event handlers (если таковые были проставлены) удаляются, а (уже подредактированные) субскрипты читаются заново.

По идее, субскрипты могут быть оформлены как угодно, но тогда перегрузить (reload) всё это добро эффективно без перезапуска лисы не получится. Для того чтобы reload срабатывал, нужно вешать обработчики событий таким образом (пример субскрипта):

Выделить код

Код:

// Обрабатывает двойной клик на табе (можно его закрыть)
//
// __RD stands for 'Restartless Development'
__RD.addListener({
	event   : 'dblclick',
	// функция, которая, когда надо будет, возвратит XUL-объект
	// для которого нужно обработать событие
	object  : function() { return getBrowser().mTabContainer },
	handler : function(event) {
		var t = event.originalTarget
		var p = t.parentNode
		if(t && p) {
			if('tab' == t.localName || 'tab' == p.localName) {
				//gBrowser.removeCurrentTab()
				alert('a tab DBLLL clicked!')
			}
		}
	},
})

Немного жёсткая форма (места для ветвления логики не предусмотрено), но для моих идей этого пока хватает. И вроде как работает о_О

Что скажете, господа разработчики: что хорошо, чего не хватает?

Отредактировано zencd (06-01-2009 05:59:36)

Отсутствует

 

№206-01-2009 06:50:42

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

Re: Разработка расширения без перезагрузки лисы — моя версия

zencd
Рекомендую посмотреть на аналог, позволяющий загружать скрипты и оверлеи вообще во все окна, и из любых файлов/каталогов: http://userchromejs.mozdev.org/
Правда, перезагружать скрипты не позволяет (надо открывать новое окно или заново открывать окно).


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

Отсутствует

 

№307-01-2009 16:19:57

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

Re: Разработка расширения без перезагрузки лисы — моя версия

zencd

чего не хватает?

Хотелось бы иметь текстовое поле в котором можно набить код и выполнить нажатием сочетания клавиш, и "консоль" в которой будет результат выполнения. Ну, то есть как это сделано в Extension Developer и ExecuteJS. Функцию print, понятное дело.
Чем не устраивает Extension Developer - в FF3 код выполняется без привилегий. Что не устраивает в ExecuteJS - алерты в случае ошибки (в Extension Developer ошибки выводятся в "консоль").
Оба расширения могут неправильно указывать строку с ошибкой.


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

Отсутствует

 

№407-01-2009 16:54:21

zencd
Участник
 
Группа: Members
Зарегистрирован: 09-07-2008
Сообщений: 60
UA: Firefox 3.0

Re: Разработка расширения без перезагрузки лисы — моя версия

Спасибо, Anton! userChrome.js получше моего будет — открыл новое окно, и мир изменился, и никаких ограничений в виде специальной регистрации обработчиков событий, полная свобода.

А что за привилегии, без которых выполняется ExtDev?

Отредактировано zencd (07-01-2009 17:17:50)

Отсутствует

 

№507-01-2009 17:31:23

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

Re: Разработка расширения без перезагрузки лисы — моя версия

Вообще-то, я рекомендовал ознакомиться с userChrome для почерпания идей к дальнейшему развитию restartless - кодовых или инфраструктурных, раз уж задан был такой вопрос "чего не хватает".
Сам я прототипирование на основе (пере)загрузки скриптов не выполняю, обычно мне надо набросать короткий код и посмотреть результат его выполнения.

А что за привилегии, без которых выполняется ExtDev?

Само ExtDev выполняется с chrome привилегиями, а вот код, который пишется в окне JavaScript Development Environment - нет. В FF2 он ещё выполнялся с chrome-привилегиями, в FF3 уже нет.
Например, если написать

Выделить код

Код:

try{
print (Components. classes)
}catch(e){print(e);}

то в "консоли" будет

Выделить код

Код:

Error: Permission denied to get property XPCComponents.classes

хотя в FF2 было бы

Выделить код

Код:

[object nsXPCComponents_Classes]

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

Отсутствует

 

№611-01-2009 12:06:30

Forest
Участник
 
Группа: Members
Откуда: Обнинск
Зарегистрирован: 05-04-2005
Сообщений: 1778
UA: Firefox 3.0

Re: Разработка расширения без перезагрузки лисы — моя версия

Вообще при правильных настройках ctrl+n даёт окно, где уже загружены последние изменения (не уверен насчёт глобальных свойств, но всё, что мне надо было, так обновлялось) - но наверное про это и так все знают?..

Anton пишет

Само ExtDev выполняется с chrome привилегиями, а вот код, который пишется в окне JavaScript Development Environment - нет. В FF2 он ещё выполнялся с chrome-привилегиями, в FF3 уже нет.

Типа чтобы через консоль нельзя было взломать [firefox]?..
Но тогда возникает сомнение, что вообще можно написать такое расширение (иначе это какая-то неполная защита).
Однако в реализации не разбирался, так что...
Опять же всегда можно скинуть скрипт в оверлей и подгрузить (или нельзя без полной перегрузки?).


---  ---

Отсутствует

 

№711-01-2009 16:59:07

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

Re: Разработка расширения без перезагрузки лисы — моя версия

Вообще при правильных настройках ctrl+n даёт окно, где уже загружены последние изменения (не уверен насчёт глобальных свойств, но всё, что мне надо было, так обновлялось) - но наверное про это и так все знают?..

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

Типа чтобы через консоль нельзя было взломать [firefox]?..

Типа, код вычисляется в html и из html по javascript-протоколу. А в FF3 с этим строго.

Опять же всегда можно скинуть скрипт в оверлей и подгрузить (или нельзя без полной перегрузки?).

От кэширования зависит.


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

Отсутствует

 

Board footer

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