Infocatcher пишеттолько реальная необходимость в таких фокусах бывает довольно редко
Интересная штука.. но я как-то затрудняюсь представить, когда она может понадобиться - если код по определению алиаса отрабатывает в расширении, то у этого расширения уже есть зарегистрированный chrome (и возможность зарегистрировать свой resource URI), через который можно адресовать ресурсы. Если не в расширении - из консоли, например - то этот код надо выполнять в каждой сессии FF.
в некоторых случаях код исполняется ещё до регистрации ресурсов. случаи эти точно не назову и актуально ли это для современных версий лиса, но иметь ввиду стоит.
можно, например, так:
если использовать fenix. тут более подробно: https://github.com/nin-jin/fenix-snippet
В общем, сделал простенькую демонстрационную кнопку-информер и написал объёмный мануал по созданию расширения с нуля, а также приёмам работы с фреймворком и его библиотекой модулей: https://github.com/nin-jin/fenix-snippet
Думаю интересно будет как новичкам так и профи для расширения кругозора.
Вкратце о фреймворке:
- унификация интерфейсов, создание высокоуровневых ооп-обёрток скрывающих неровности, избыточность и низкоуровневость.
- максимальная асинхронность с использованием волокон
- максимальная модульность, мобильность и автоматизация
Если найдётся человек, который проникнется этими идеями и возглавит разработку фреймворка - будет вообще шикарно, а то я не могу уделять ему достаточно времени :-(
hydrolizer а при чём тут именно язык? я говорил об окружении в котором не то что учиться, а вообще программировать сложно. этот xpcom зоопарк писали разные люди с разной проф-пригодностью, зачастую не думая о тех, кто будет их поделия использовать. Касательно примера с пропаданием исключений - например передай коллбэк в nsiTimer и вызови в нём исключение, емнип в консоли будет девственно чисто. Они эти дырки постепенно залатывают, но пока ещё не везде починили.
касательно xslt - это был фастфикс уязвимости, из-за классного решения нам теперь приходится частично отказываться от xul, а частично перед преобразованием переименовывать неймспейс, а после трансформации - переименовывать обратно.
ну покажи эту другую функцию
через e4x как-то так:
group.substitutions.substitution+= <substitution>...</substitution>
ну я могу посмотреть на днях. а зачем оно7
что за фичи?
например, некоторые исключения просто пропадают. некоторые попадают в консоль, но без координат. при записи в консоль undefined - она полностью очищается. крайне низкая информативность стандартных исключений - в лучшем случае можно понять что произошло, но не при каких обстоятельствах. порою встречается просто феерический бред, например, невозможность создавать xul элементы с помощью xslt. и это лишь малая вершина айсберга.
учиться пограммировать под xul runner - неблагодарное занятие. уж слишком много мистики. лучше потренировать javascript на обычных веб страничках.
- как лучше всего убить себя?
- привяжи камень к шее и ныряй в море.
- не, ну мне бы как-нибудь по оригинальней.
- иди в лес и подерись с медведем.
- не, ну мне бы не так далеко от дома.
- подожги себя выпрыгни из окна.
- не, ну надо чтобы опознали потом.
- ну тогда не поджигай, а повяжи длинную верёвку на шею.
- не, ну я хочу чтобы труп потом выглядел как мачо.
- одень костюм бетмена и в полёте кричи "кавабанга!"
- ну как вариант. а можно сделать так чтобы лужа крови от меня была в виде сердца?
- так, чувак, тебе зачем это всё надо?
- да хочу девушке доказать как сильно её люблю.
- тогда заткнись, вытри сопли и хоть раз подари ей улыбку. герой нашего времени, блин.
в чём принципиальная разница?
не проще ли document.body.innerHTML='новое окно'?
из расширения можно получить window для текущего таба и добавить туда необходимые ручки
что-то типа gBrowser.mCurentBrowser.contentDocument.docShell.DOMWindow.myAction= function(..){..}
https://developer.mozilla.org/en/Gecko_FAQ#Are_Gecko's_APIs_based_on_ActiveX.3F_COM.3F_JavaBeans.3F
тут вообще остались ещё разработчики расширений или я зря распинаюсь?
если нет, то где их можно найти?
Быстрая демонстрация
Синхронный код. Простой и лаконичный, но, пока он не завершится полностью, другие задачи не исполняются.
let downloadSync= function( from, to ){ try { let content= getContent( from ) writeContent( to, content ) alert( 'saved!' ) } catch( e ){ console.error( e ) } }
Асинхронный код. Пока идёт ожадание окончания запросов можно сделать ещё много других полезных вещей. Но структура кода трудна для восприятия так как представляет из себя хитрое переплетение функций.
let downloadAsync= function( from, to ){ getContent( from, whenContentReceived, onError ) function whenContentReceived( content ){ writeContent( to, content, whenContentWrited, onError ) } function whenContentWrited( ){ alert( 'saved!' ) } function onError( e ){ console.log( e ) } }
Цепочечный код. С помощью специального хелпера все функции и асинхронного варианта
…распаковать и запустить
02-10-2011 18:53:40
я сейчас изворачиваюсь так: создаю во временной директории скрипт, который исполняет некоторые команды и перенаправляет свой вывод в файл. потом парсю файл и получаю нужные мене данные. нет ли более прямых способов выполнять шелл-команды?
я тут потыкался по интернетам и не нашёл ничего приличного на эту тему.
есть нативные ручки. доступные через Components, но они настолько низкоуровневые и кривые, что приходится писать тучу кода, обильно сдабривая её костылями.
есть набор библиотек доступный из resource:/gre/modules/ - они конечно сильно упрощают работу, но их разношёрстный (от ооп, до процедурщины) апи не слишком удобен.
есть попытка создать что-то высокоуровневое под названием FUEL ( https://developer.mozilla.org/en/FUEL ), но его апи весьма бедно и сильно специфично.
есть ещё что-то что я пропустил и что стоило бы внимания?
спрашиваю я это потому что разрабатываю свой и меня сильно печалит отсутствие достойных конкурентов ._."
из интересных фич моего фреймворка могу отметить:
1. лёгкость подключения. подключаем специальный модуль и он создаёт всё необходимое окружение. не нужно объявлять никакие EXPORTED_SYMBOLS - просто объявляем глобальный объект с именем модуля и всё.
2. автозагрузка модулей по требованию.
…прямых ручек нет, встраиваться приходится разными хаками.
когда юзер хочет открыть новый таб вызывается window.BrowserOpenTab - его можно перегрузить и вместо пустого таба открыть свой.
не надо это включать.
самое простое - генерировать случайный query-string
вариант по сложнее - удалять файл из кэша вручную. тут я не в теме.
ничего не понятно, но подозреваю поможет xbl
подозреваю копать нужно отсюда: https://developer.mozilla.org/en/XPCOM_Interface_Reference/nsIChannelEventSink
Не утверждайте, что ошибки нет.
Помните, что не смотря, на то, что вы всё десять раз перетестили и вам не поступало ни одного багрепорта на эту тему, это не значит, что ошибки нет. Большинство пользователей никогда не посылают багрепортов, а не выявленные при первичном тестировании ошибки как правило проявляются не у всех пользователей.
И помните, если работоспособность вашей программы зависит от кривизны рук пользователя - ЭТО УЖЕ БАГ
гугол не продвигает фаерфокс. наоборот, фф продвигает гугол. за неслабый откат, конечно..
новый скин ужасен. ещё хуже, чем предыдущий.
хороший софт даже в кривых руках работает, а не привередничает "у вас недостаточный радиус кривизны, валите отседова"
в общем, опера как была ацтоем, так и останется.