Страницы: 1
http://www.w3schools.com/xsl/el_variable.asp :
Note: Once you have set a variable's value, you cannot change or modify that value!
Вот собственно и всё =)
Имхо, необходимо создать xpcom компонент, в нём зарегистрировать observer через компонент "@mozilla.org/observer-service;1". И слушать его :) При закрытии посылается "quit-application", при открытии - "app-startup".. Пример можно глянуть в components/nsExtensionManager.js..
$ w3m -dump_head http://www.e-puzzle.ru/book/SergeyLazarev-Neopublikovannoe.rar Date: Fri, 10 Feb 2006 06:02:14 GMT Server: Apache/1.3.33 (Unix) Cache-Control: max-age=0 Expires: Fri, 10 Feb 2006 06:02:14 GMT Last-Modified: Tue, 07 Feb 2006 06:05:13 GMT ETag: "20b04e-51bd8-43e83899" Accept-Ranges: bytes Content-Length: 334808 Connection: close Content-Type: text/plain; charset=windows-1251
Заголовок Content-Type сервер неверно отдаёт имхо. Из-за этого фаерфокс решает что это обычный текстовый файл, да еще в кодировке cp1251.
Вообще, в сырцах фаерфокса 1.5 есть "mailnews/". Там лежат сырцы компонент - видимо собрать их можно.. Только как - я тебе не скажу, т.к. сам не знаю.
Посмотрите в профиле или в директории firefox'а файл compreg.dat - там прописаны все компоненты.. Попробуйте поискать. Кстати, в моём нет (Firefox 1.5, Xulrunner 1.8). ;)
А почему бы одним источником данных не обойтись? Добавить метод, скажем, changeDataSourceURL (url).
Вообще было бы идеально зарегистрировать один компонент с одним GUIDом и несколькими контрактами, а в фабрике в зависимости от контракта создавать разные источники. Но так как до фабрики объектов createInstance доходит только нужный интерфейс(nsIRDFDataSource) и GUID компоненты(это действительно так?) - остаётся создавать конкретный источник только по cid. Это, конечно, немного не удобно.. Или, может, я просто неправильно понял вопрос? :rolleyes:
И еще. Если добавлять свой метод в интерфейс - придётся idl к нему писать, а потом его еще и компилировать в xpt..
Кстати, спасибо. Мне такой примерчик нужен был.
Не за что :)
Довёл компонент до ума. Теперь можно определять несколько встроенных источников через один модуль.
nsCustomDatasouces.js:
[code]const CUSTOMDATASOURCE_IID = Components.interfaces.nsIRDFDataSource;
// контракты
var aContractsID = new Array(
'@mozilla.org/rdf/datasource;1?name=adsk-users',
'@mozilla.org/rdf/datasource;1?name=adsk-test'
);
// id компонентов
var aCID = new Array(
Components.ID('{1da0cb45-aea3-4a52-8b29-01429a542863}'),
Components.ID('{1da1cb45-aea3-4a52-8b29-01429a542863}')
);
// uri источников данных
var aURI = new Array(
'http://localhost/rdfTest.php',
'http://localhost/test.rdf'
);
/* Поиск в массиве */
function findCID(cid)
{
var i;
for(i=0; i<aCID.length; i++)
if(cid.equals(aCID[i]))
return i;
return null;
}
/* Проверка наличия в массиве */
function CIDExists(cid)
{
if(findCID(cid)!=null)
return true;
return false;
}
/* модуль */
var nsCustomData
Всё, разобрался, и даже компоненту сделал :D Может пригодиться кому-нибудь..
nsusersdatasource.js:
[code]const USERSDATASOURCE_CONTRACTID = '@mozilla.org/rdf/datasource;1?name=adsk-users';
const USERSDATASOURCE_CID = Components.ID('{1da0cb45-aea3-4a52-8b29-01429a542863}');
const USERSDATASOURCE_IID = Components.interfaces.nsIRDFDataSource;
var nsUsersDataSourceModule = {
registerSelf: function(compMgr, fileSpec, location, type) {
compMgr = compMgr.QueryInterface(Components.interfaces.nsIComponentRegistrar);
compMgr.registerFactoryLocation(USERSDATASOURCE_CID,
"ADSK users built-in datasource",
USERSDATASOURCE_CONTRACTID,
fileSpec,
location,
type);
},
getClassObject: function(compMgr, cid, iid) {
if (!cid.equals(USERSDATASOURCE_CID))
throw C
Сложновато :/ А компоненту можно на java-script написать и зарегистрировать? Или обязательно в C++?
А про изменение datasources из js я тоже думал, но короткие имена источников имхо более красивое решение..
Разрабатываю приложение для работы с бд(использую xulrunner 1.8). Есть php скрипты, которые отдают rdf-ки, на основе которых строится интерфейс. Неудобство в том, что приходиться в datasources прописывать полный uri к скрипту, а так как приложение в стадии разработки - эти uri часто меняются. Так же проблемно будет менять хост, с которого получаю данные. Возник вопрос - можно ли создавать свои источники данных с "короткими" именами, такими как "rdf:history", например - "rdf:coolprog-users"? Поиски ничего не дали.. :(
ps. Во всём этом я новичок - просьба сильно не пинать.. ;)
Страницы: 1