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

Список ответов на каверзные вопросы можно получить в FAQ-разделе форума.

Обсуждение расширений » TabLang - отдельные раскладки клавиатуры для каждой вкладки » 06-01-2012 21:21:19

Какие стоят настройки и что конкретно надо сделать, чтобы воспроизвести? И какая операционная система?

Если нужно только для адресной строки - есть штуки вроде UrlCorrector и URL Fixer Plus RU and UA

Обсуждение расширений » TabLang - отдельные раскладки клавиатуры для каждой вкладки » 24-12-2011 03:56:19

Shade пишет

Честно говоря мне так сильно его не хватает, а ведь альтернатив с таким же функционалом и нет.

А в чем проблема-то?

Разработка » Как правильно добавить событие TabOpen на все окна? » 14-10-2009 22:35:05

Исходное назначение модулей - писать туда функции, которые используются в разных местах, чтобы не дублировать их. Побочным эффектом является то, что модули загружаются только один раз и являются общими для всего приложения, и поэтому переменные, объявленные внутри модулей, тоже общие (в частности, общие для всех окон). Поэтому, модули можно использовать для взаимодействия МЕЖДУ окнами (простейший пример - расширение, подсчитывающее общее количество когда-либо открытых за сессию вкладок). Однако если в вашем случае достаточно, чтобы каждое окно обрабатывало только СВОИ вкладки, модули конечно не нужны.

Разработка » Как правильно добавить событие TabOpen на все окна? » 14-10-2009 00:35:13

Видимо этот код выполняется в оверлее для browser.xul. Т.е. в КАЖДОМ окне выполняется код "зарегистрировать обработчик события для всех окон", поэтому количество alert-ов равно количеству открытых окон Фокса.

Если возможно, то лучше устанавливать обработчик в каждом окне только для ЭТОГО окна.

Но если требуется централизованная обработка событий, то надо что-то из этого (скорее всего JS Modules): https://developer.mozilla.org/en/Workin … ta_sharing

Разработка » Доступ из расширения к переменным страницы. » 23-09-2009 01:15:10

Infocatcher пишет

Тем не менее, лишний раз лучше так не делать

Так в Fx 3.0+ вроде же XPCSafeJSObjectWrapper. Он должен быть безопасным.

Разработка » Проблема с AMO update service » 21-09-2009 21:51:09

Экспериментальные расширения с addons.mozilla.org не обновляются в принципе. Номинируйтесь и ждите.

Разработка » XPCOM: Определить класс » 17-09-2009 00:24:26

Надо же еще получить сам объект:

Выделить код

Код:

Components.classes["@mozilla.org/browser/sessionstore;1"].getService(Components.interfaces.nsIClassInfo).getInterfaces({})

Причем для некоторых компонентов надо вызывать createInstance, а не getService. И похоже, большинство компонентов, написанных на С++, не поддерживают nsIClassInfo.

Разработка » XPCOM: Определить класс » 16-09-2009 20:59:07

Выделить код

Код:

void getInterfaces(out PRUint32 count, [array, size_is(count), retval] out nsIIDPtr array);

Второй параметр out+retval, т.е. из JavaScript он будет виден не как второй параметр функции, а как её возвращаемое значение.

Чтобы получить первый out-параметр, надо передать этой функции объект, и она заполнит в нем поле value в данном случае размером массива (иммитация передачи по ссылке, используемая XPConnect при вызове методов XPCOM-интерфейса из JavaScript). Но в JavaScript не нужно отдельно знать размер массива - он будет в CiR.length автоматически (XPConnect всё сделает сам), поэтому передаем пустой анонимный объект.

Выделить код

Код:

var CInf = Components.classes['@mozilla.org/timer;1'].QueryInterface(Components.interfaces.nsIClassInfo);
var CiR = CInf.getInterfaces({});
document.writeln("+++ "+ CiC +"<br>");

Разработка » XPCOM: Определить класс » 16-09-2009 15:04:28

Можно открыть пустую вкладку (руками) и дописывать в нее:

Выделить код

Код:

win.gBrowser.contentDocument.body.innerHTML += "yourtext"

А вообще в Extension Developer есть JavaScript shell - очень удобно в таких случаях.

Разработка » Получение списка установленных дополнений » 06-09-2009 16:46:07

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

По умолчанию же страницы не имеют доступа к расширениям. Это принципиально для таких расширений, как AdBlock и Greasemonkey.

Разработка » Failed to load XPCOM component » 02-09-2009 14:17:10

Yakovchuck пишет

Возможно. Может кто-нибудь подскажет где это посмотреть и точно убедится статическая или динамическая линковка и потом выставить статически если нужно ? Я использую Visual Studio 2005.

http://forums.mozillazine.org/viewtopic … 5#p3721065
На английском, но, думаю, понятно. В хелпе по этим настройкам, кажется, все более детально написано.

Разработка » Failed to load XPCOM component » 14-08-2009 01:31:23

Может используется C++ Runtime (msvcrt или как там её) с динамической линковкой? Тогда в XP, где стоит Visual Studio, все работает, т.к. есть нужные динамические библиотеки, а в висте их нет.

Версии Firefox одинаковые?

Можно попробовать что-нибудь отсюда: https://developer.mozilla.org/En/Troubl … gistration

Разработка » Помогите с созданием расширения » 21-07-2009 02:04:21

Infocatcher пишет

Видимо, неправильно подключен скрипт.
Должно быть примерно вот так:

Или использовать CDATA, если скрипт в самом xul-файле. Тогда XML-парсер не будет ругаться на & и < в JS-коде. Примерно так:

Выделить код

Код:

<script> <![CDATA[
   // ... собственно JS-код
]]> </script>

Разработка » xul browser content » 01-07-2009 02:57:55

"Ошибка: Permission denied for <file://> to create wrapper for object of class UnnamedClass Источник: chrome://global/content/bindings/browser.xml"

Видимо, если из файла открывать, у xul-а content-права, и ему, соответственно, нет доступа к веб-странице, которая загружена в browser (формально она с другого домена). Видимо, xul explorer открывает с chrome-привилегиями. Если xul использовать в расширении, все будет работать.

Разработка » Запуск функции из контента. » 23-06-2009 04:25:25

У меня получается.

Страница foo.html

Выделить код

Код:

<html><head>
<script>
function bar(x) { alert(x); }
</script>
</head><body>ащщ</body></html>

Открываю страницу в ФФ. В JS-консоли из Extension Developer:

Выделить код

Код:

> enumerateWindows()
...
> scope(...)
Scope is now [object ChromeWindow]. If a variable is not found in this scope, window will also be searched. New variables will still go on window.
> content.bar
function bar(x) { alert(x); }
> content.bar(1)
// фокусится на главном окне ФФ и показывает алерт

Вообще для всего этого нужен XPCSafeJSObjectWrapper. Есть только в FF3.0 и позже и должен создаваться по умолчанию. Думаю, можно сделать его принудительно. Видимо, что-то вроде content.XPCSafeJSObjectWrapper(...), но какие параметры писать, я не знаю.

Разработка » Как создать панель под контентом (как в Firebug) » 31-05-2009 15:15:35

firebug/browserOverlay.xul#134 (fbPanelBox и fbCommandBox лежат в firebugOverlay.xul)

Аналогично делается в ABP:
adblockplus/chrome/content/ui/overlay.xul#l86
adblockplus/chrome/content/ui/overlayGeneral.xul#l104 (продолжение)

Короче говоря, они добавляют самодельную панель в конец appcontent. Firebug добавляет всё сразу, ABP использует iframe.

Разработка » XPCOM NS_NOINERFACE » 30-05-2009 17:00:09

Вообще странно. NS_IMPL_ISUPPORTS1 как раз включает в себя стандартную реализацию QueryInterface, поэтому всё должно работать нормально.

А Components.interfaces.nsIQRENotificationService вообще определен? Проще всего зайти в консоль JS-ошибок, нажать при необходимости "очистить", потом в строке выполнить команды

Выделить код

Код:

Components.interfaces.nsIQRENotificationService
Components.interfaces.nsIQRENotificationService == undefined

Должно выдать соответственно nsIQRENotificationService и false.

А

Выделить код

Код:

Components.classes["@component.com/notificationservice;1"].createInstance(Components.interfaces.nsIQRENotificationService)

работает? (Скорее всего будет та же ошибка). А

Выделить код

Код:

obj.QueryInterface(Components.interfaces.nsISupports)

?

Разработка » XPCOM NS_NOINERFACE » 30-05-2009 16:08:42

Обычно понятно, какой компонент что умеет. Это обычно написано или в коде, или в доках.

Насколько я себе всё представляю, список поддерживаемых интрфейсов "хранится" в реализации функции QueryInterface, но она может только сказать, есть интерфейс или нет. Теоретически можно попробовать пройтись по ВСЕМ интерфейсам (из Components.interfaces) и попытаться сделать для каждого QueryInterface.

Может просто obj - это просто не тот объект. Или еще может быть ошибка в реализации QueryInterface (например, если компонент написан на JS, надо обычно писать QueryInterface самому)

Разработка » XPCOM NS_NOINERFACE » 30-05-2009 15:23:08

Проблема не в том, что интерфейса нет вообще (idl тут ни при чем). Просто данный конкретный объект obj не поддерживает этот интерфейс.

Разработка » XPcom » 13-05-2009 01:04:32

Может надо было заново сгенерировать IMyComponent.h из IMyComponent.idl. У меня недавно было что-то похожее, когда файл из архива был сделан в одной версси Gecko SDK (1.8), а компилировался с другой (1.9)

Разработка » SmoothWheel - не получается создать поддержку мультиязычности » 13-05-2009 01:00:03

Для свежескачанного файла (я так понял он кое-где изменился):

Выделить код

Код:

firefoxOverlay.xul, строка 3
- <!DOCTYPE overlay SYSTEM "chrome://showmypassword/locale/showmypassword.dtd">
+ <!DOCTYPE overlay SYSTEM "chrome://showmypassword/locale/firefoxOverlay.dtd">

options.xul, строка 3
- <!DOCTYPE prefwindow SYSTEM "chrome://showmypassword/locale/prefwindow.dtd">
+ <!DOCTYPE prefwindow SYSTEM "chrome://showmypassword/locale/options.dtd">

После этого видимых ошибок я не наблюдаю (по крайней мере в JS-консоли)

Разработка » SmoothWheel - не получается создать поддержку мультиязычности » 11-05-2009 20:04:43

Я же сказал, что были указаны адреса несуществующих dtd-файлов. Когда я поменял (точно не помню) preferences.dtd на OptionsDialog.dtd, все заработало

Board footer

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