Подскажите как наиболее правильно и без создания тяжеловесных XPCOM компонентов распарсить HTML entity из XPCOM JavaScript компонента?
Надо распарсить всякие последовательности вида & #9829; &.
Раньше когда весь код работал на уровне отдельно окна, то я создавал через document.createElement новый iframe и запиcывал в него всю строку, потом вручную заменял оставшиеся 4 последовательности < > & и всё было хорошо, но в XPCOM нету объекта document.
Есть идея через nsIWindowMediator получать любое окно и всё делать уже через window.document, но нет уверенности что у любого окна будет document. Т.е. основное окно Firefox может быть уже закрыто, а останется маленькое окошко открытое каким-нибудь расширением.
nsISecurityCheckedComponent нужен в том случае, если мы хотим вызывать методы этого компонента из непривилегированного кода. К задаче получения указателя на компонент этот интерфейс никак не относится.
Вот только ни один браузер не понимает такого объявления (Firefox 3, Chrome, Opera 9.21, IE 6, Safari).
Можно полностью рабочий пример?
Можешь привести пример который будет работать не из расширения, а лежать как отельный файл на диске, и не будет использовать chrome:// ссылки? А то у меня пока не получается...
Как известно XUL файлы можно локализовывать с помощью DTD (https://developer.mozilla.org/en/XUL_Tu … calization).
А можно ли сделать тоже самое с HTML?
Т.е. например так:
index.html
<!DOCTYPE html SYSTEM "main.dtd"> <html> <head> <title>&my_main_page;</title> </head> <body> &my_welcome_message; </body> </html>
main.dtd
Ок, теперь я доволен :)
Очень прошу - добавьте возможность вида боковой панели вместо бара - как это сделано у Flock браузера.
Посмотрю что можно сделать в данном направлении.
Не знаю как принято здесь на форуме, но меня лично, как создателя тулбара для сайта Вконтакте, не радует когда появляется информация не соответствующая действительности и касающаяся тулбара!
А именно, по вышеобозначенной ссылке http://forum.mozilla-russia.org/viewtop … 49#p261549 присутствует строчка
Перевод на русский язык: Sergeys
которая никак не соответсвует действительности.
Спасибо большое!
Здравствуйте.
Когда я с помощью Ctrl-+ увеличиваю размер шрифта в Firefox 3.0.1, то в остальных вкладках с этого сайта шрифт тоже увеличивается. В Firefox 2 такого не было. Существует ли способ вернуть былое поведение Firefox'у, т.е. чтобы при увеличении шрифта в одной вкладке, в других всё оставалось неизменным?
Что именно должен отображать этот объект? Возможно здесь совсем не нужен XPCOM...
Либо действительно сделать js-функцию с получением переменной и вызывать ее из сей? Так-то можно?
Можно. Точнее сделать компоненту на JavaScript и вызывать её из C++.
А можно ли в си-мотоде xpcom-а узнать откуда его позвали? Ну хотябы из какого js-файла...
Наверное... http://www.mozilla.org/scriptable/javascript-stack-dumper.html
Это самый простой способ. Т.к. насколько мне известно нативный код из Flash и обратно можно вызывать, только через JavaScript.
А почему не пойдёт?
В требованиях сказано чтобы ни строчки JavaScript'ового кода не было? Основная работа всё равно останется на сях...
Напоследок... В большинстве случаев если объект получается через wrappedJSObject то он преимущественно будет нормально работать только в JavaScript.
В расширениях в установочном скрипте install.js используется глобальный объект Install. В описаниях методов этого объекта натыкаюсь на слова "Client Version Registry". Возникает вопрос, где этот реестр расположен и как его посмотреть в удобном для человека виде?
Если этот GetVariable вызывается нормально только из JavaScript, то можно сделать обёртку для него. Создать интерфейс для XPCOM компонента, реализовать его на JavaScript и оттуда вызвать функцию GetVariable, а уже из плюсов вызывать обычным способом функцию из этого XPCOM компонента.
Можно в расширении в конец navigator.userAgent добавить какую-нибудь строку как это делают некоторые расширения, например WebMoney Advisor.
Можно на С++ с помощью функции JS_SetProperty движка SpiderMonkey добавить в глобальный объект (window) своё поле или функцию.
Нужно опираться на более строгие описания, а не на статьи поясняющие общие принципы.
http://developer.mozilla.org/en/docs/ns … ttpRequest
You must call open() on the XMLHttpRequest before setting any event listeners on it.
Интересно как это вообще работало!?!
Все свойства и методы XMLHttpRequest должны вызываться между open и send.
Странно... У меня второй вариант работает.
Попробуй сначала путь к какой-нибудь стандартной иконке. Пример:
<menuitem class="menuitem-iconic" image="chrome://global/skin/icons/folder-item.png" label="123"/>
Нужно сделать расширение для Firefox которое предоставляло бы сайту дополнительные специфические функции.
Имеется ввиду следующее:
В расширении:
function Init() { window.my_component = Components.classes[ "@my_component;1" ] .getService( Components.interfaces.IMyComponent ); window.my_info = my_info_object; } window.addEventListener( "load", Init, false );
На сайте:
function GetLowLevelInfo() { return my_component.GetInfo(); } function GetHighLevelInfo() { return my_info.GetInfo(); }
Имеется ввиду что сайту объекты my_component и my_info предоставляются расширением.
В том варианте который я привёл эти 2 объекта не видны с сайта, а только из расширений.
Вопрос! Как сделать эти объекты доступными с сайта без необходимости сайту запрашивать дополнительные привилегии через PrivilegeManager или как бы то ни было ещё ???
…В твоём случае нужен только onmousemove, но oncommand и onclick тоже лучше поставить чтобы исключить подобные проблемы.
А вообще смотри http://www.w3.org/TR/DOM-Level-3-Events/events.html#Events-flow
<toolbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"> <toolbar> <toolbarbutton label="Button" type="menu-button" tooltiptext="Only on button"> <menupopup oncommand="event.stopPropagation();" onclick="event.stopPropagation();" onmousemove="event.stopPropagation();"> <menuitem label="1" /> <menuitem label="2" /> <menuitem label="3" /> </menupopup> </toolbarbutton> </toolbar> </toolbox>
У меня такой вопрос, хочу использовать в своём расширении настройки, задаю у окна 3 кнопки OK (Синхронизировать настройки, выполнить функцию func1() и закрыть окно), Apply (Синхронизировать настройки, выполнить функцию func2() и не закрывать окно) и Cancel (Не синхронизировать настройки и не вызывать ни func1(), ни func2())... Под Windows всё работает именно так как я и описал, но вот под Linux из нужных мне кнопок отображается только Apply, и ещё появляется ненужная кнопка Close, которая вызывает синхронизацию настроек и закрывает окно, но не вызывает ни одной из нужных мне функций, т.е. нарушается логика в сохранении настроек, т.к. некоторые настройки требую предварительной обработки перед сохранением...
Может кто-нибудь сталкивался с подобной проблемой или есть идеи по тому как мне убрать кнопку Close и вернуть OK и Cancel ?
[code]<prefwindow
buttons="accept,extra1,cancel"
buttonlabelaccept="OK"
buttonlabelextra1="Apply"
buttonlabelcancel="Cancel"
ondialogaccept="return func1();"
on
Спасибо! Всё получилось, всё работает!
Ну а вообще, как перевести из юникода в Windows-1251 ?
Ну само собой приведёт, но он ожидает увидеть только кодировку Windows-1251 и следовательно каждая последовательность %NN приведётся к одной какой-то букве, а если ему передаётся юникодный символ, а у юникода 2 байта на букву, то одна буква передастся на сервер в виде %NN%MM, а сервер будет интерпретировать эту последовательность не как один символ, а как два, и в итоге получаются каракули...