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

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

Разработка » новый элемент в Bookmarks toolbar » 21-10-2008 11:17:27

а как пробовал?
смотрел как работает добавление в закладки?

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

Разработка » новый элемент в Bookmarks toolbar » 20-10-2008 21:24:58

Всем привет.

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

Заранее спасибо.

Разработка » xulrunner-1.9.0.1-source\mozilla\embedding\tests\winEmbed » 09-09-2008 11:24:47

Всем спасибо за ответы ...
Закрываем тему ...

Разработка » xulrunner-1.9.0.1-source\mozilla\embedding\tests\winEmbed » 04-09-2008 12:35:33

Привет всем.

Кто знает, что это за путь, тому понятно будет, о чем речь. Диалоговое приложение на движке мозиллы, практически свой браузер. Вот только выглядит он действительно как обычное диалогое окно, то есть скин (тема) к нему не применяется, несмотря на то, что без bin\chrome\classic.jar и bin\chrome\classic.manifest приложение не работает.

Вопрос: как заставить его использовать скин?

Разработка » Использование ф-ий стороннего длл » 21-08-2008 17:53:51

Все гениальное просто ... как всегда ... :)

Разработка » Использование ф-ий стороннего длл » 21-08-2008 13:19:36

Думаю, длина строки значения не имеет. Я у себя туда копировал весь текст HTML страницы, причем проверял на очень большиx (мегабайта полтора - текстовая страница, так что это уже миллионы символов).

Пробовали не использовать CString? Может быть обычный std::string поможет?

Разработка » Использование ф-ий стороннего длл » 21-08-2008 13:01:15

Странно ... У меня такой вот код нормально работает:

Выделить код

Код:

nsEmbedCString strOut;
NS_UTF16ToCString(	nsEmbedString(strIn), 
				  	NS_CSTRING_ENCODING_UTF8, 
				  	strOut);

при этом strIn это nsEmbedString.
Может, не нужно _retval объялять как ссылку?

Разработка » Использование ф-ий стороннего длл » 21-08-2008 11:09:59

Там такая забавная канитель может получиться с преобразованием nsEmbedString в nsEmbedCString ... :)

Разработка » Использование ф-ий стороннего длл » 20-08-2008 17:38:49

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

Может, стоит поконкретнее описать проблему? Авось кто-нибудь да поможет :)

Разработка » Использование ф-ий стороннего длл » 20-08-2008 13:30:48

Первое, что приходит в голову, написать XPCOM компоненту (dll), которая и будет вызывать эти методы ... Насчет javascript сомневаюсь, что это возможно ...
В инете всего один источник, в ктором подробно и толково написано, как создавать XPCOM:
http://www.iosart.com/firefox/xpcom/

Разработка » Как собрать xpi для установки XPCOM компонента. » 19-08-2008 14:55:06

А все оказалось проще пареной репы.

Главное, чтобы в С++ #define MY_APP_CONTRACTID

"@mozilla.org/MyApp;1"

и в javascript const cid =

"@mozilla.org/MyApp;1"

;
были одинаковыми! ... ну это и ежу понятно. Сам не знаю почему так долго возился ... просто поместил dll и xpt файлы в папку components, которая в одной папке с chrome лежит и все:
  my_extension
  |_chrome
  |_components

Всем спасибо за помощь. Жаль слова Anton'a до меня поздно долетели.

Разработка » Как собрать xpi для установки XPCOM компонента. » 19-08-2008 13:28:41

с XPCOM работает очень мало разработчиков
почему бы не посмотреть как это устроено в любом другом расширении с XPCOM?

именно этим и занимаюсь уже последние 2 дня ...

Разработка » Как собрать xpi для установки XPCOM компонента. » 19-08-2008 12:20:28

Неужели никто о таком не слышал никогда, разработчики? Или форумы совсем бесполезны? Или это просто лето?..

Разработка » Как собрать xpi для установки XPCOM компонента. » 18-08-2008 18:51:32

Все бы хорошо, да вот только как заставить мой XPCOM компонент вызываться из той папки, куда его установили?

Дело в том, что все примеры создания XPCOM компонент оперируют с папкой ~\firefox\components. Да и в самом С++ коде я пишу:

Выделить код

Код:

#define TEST_APP "@mydomain.com/XPCOMSample/TestApp;1"

а потом из javascript'a вызываю:

Выделить код

Код:

const cid = "@mydomain.com/XPCOMSample/TestApp;1";
. . .

Как же его правильно вызывать и моего профайла в браузере? Что писать в С++ и что в js?

Разработка » Как собрать xpi для установки XPCOM компонента. » 18-08-2008 12:10:16

Привет всем.

Собственно проблема в том, что не знаю с чего начать. Насколько я понимаю, традиционная установка с помощью install.js уже не приветствуется или даже порой не будет работать, а нужно использовать install.rdf, и тем не менее большинство расширений (те, которыми пользуюсь я, и которые пробовал ставить) испльзуют именно такой метод.

Направьте, пожалуйста, на путь истинный ... желательно со ссылками, да и к тому же чтобы для FF2 и для FF3 работало.

Заранее спасибо.

Разработка » Расширение из FF2 не работает в FF3 » 11-08-2008 10:51:31

Shutnik пишет

для firefox 3.0 нужен SDK на основе gecko 1.9
http://developer.mozilla.org/en/docs/Gecko_SDK

Shutnik, спасибо ... да действительно. Проблема решена.

Разработка » Расширение из FF2 не работает в FF3 » 08-08-2008 18:13:29

Привет всем.

Расширение включает XPCOM компоненту, использующую Gecko SDK 1.8.0.4.

Конкретику пока не пишу, потому как надеюсь, что есть уже более ли менее полный список причин, почему не работают расширения в Firefox 3, и, хотелось бы верить, решений тоже.

Спасибо заранее.

Разработка » Получить полный текст страницы в XPCOM копоненте » 31-07-2008 19:37:21

Решение, господа.
NS_IMETHODIMP MyComponent::GetDOM(nsIDOMDocument *doc, PRInt32 *_retval)

Выделить код

Код:

{
	nsresult rv;
	nsCOMPtr<nsIDOMSerializer> pSerializer = do_CreateInstance(NS_XMLSERIALIZER_CONTRACTID, &rv); 

	nsEmbedString nsHtml;
	pSerializer->SerializeToString(doc, nsHtml); 
	
	nsEmbedCString strOut; 
	NS_UTF16ToCString(nsEmbedString(nsHtml), NS_CSTRING_ENCODING_UTF8, strOut);

	std::stringstream ss;
	ss << strOut.get();
	MessageBox(NULL, ss.str().c_str(), "", MB_OK);	

	return NS_OK;
}

Разработка » Получить полный текст страницы в XPCOM копоненте » 31-07-2008 17:53:23

Подобная тема уже обсуждалась:
http://forum.mozilla-russia.org/viewtopic.php?id=8417

javascript это делает так:

Выделить код

Код:

var cont = window.getBrowser().contentDocument;
	var ser = new XMLSerializer();
	var st = ser.serializeToString(cont);

Мне нужно получить все то же самое только из С++ кода и именно в таком же виде, то есть не просто содержимое между [html] и [/html], а все, все, все, даже если страница с ошибкой и что-то записано вне этого тега + <!DOCTYPE и прочее

Сейчас я просто передаю строку st в XPCOM компоненту, но это решение не совсем красивое, потому как совершенно точно должен быть способ получить всю DOM структуру документа посредсвом интерфейсов Mozilla

Я уже могу получить nsIDOMDocument и nsIDOMWindow, но что-то с ними не все так просто ...

Подскажите, пожалуйста, как быть.

Разработка » Передача параметра из javascript в XPCOM компонент » 31-07-2008 17:33:25

Проблема решена:

Выделить код

Код:

NS_IMETHODIMP MyComponent::GetDOM3(nsEmbedString *Domstr, PRInt32 *_retval)
{		
	std::stringstream ss;
	nsEmbedCString strOut; 
	NS_UTF16ToCString(    nsEmbedString(*Domstr),
					NS_CSTRING_ENCODING_UTF8, 
					strOut);
	ss << strOut.get();
	MessageBox(NULL, ss.str().c_str(), "", MB_OK);	
	return NS_OK;
}

Разработка » Передача параметра из javascript в XPCOM компонент » 31-07-2008 16:25:01

Всем привет.

Задача звучит просто. Мне нужно из javascript передать в компоненту XPCOM строку. Делаю так:

Выделить код

Код:

netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
const cid = "@mydomain.com/XPCOMSample/FF_component;1";
obj = Components.classes[cid].createInstance();
obj = obj.QueryInterface(Components.interfaces.FF_component);

var MyString = "Test string";
obj.GetDOM(MyString);

Соответственно функция в компоненте выглядит так:

Выделить код

Код:

NS_IMETHODIMP FF_component::GetDOM(nsEmbedString *Domstr, PRInt32 *_retval)
{		
	return NS_OK;
}

Domstr что-то да содержит, ибо там не ноль. Однако любые пляски с бубном вокруг этой штуки не увенчались успехом.

Вопросы:
1. Как сконвертить nsEmbedString во что-то, что похожее на строку, на которую можно посмотреть? В идеале было бы преобразование в stringstream.
2. Возможно есть уже работающая схема передачи параметра из JS в XPCOM?
Спасибо заранее.

Board footer

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