Страницы: 1
Привет всем! возникла такая ситуация. Я разрабатываю расширение для FF, для его работы нужно хранить некоторую информацию, для хранения выбрал поддержку SQLite. так вот, проблема в том, что в FF 3.6 ниже следующий код работает на ура, а в 3.0.10, Error Console говорит, что statement.row is undefined. В чем проблема?
//подключение к базе var DB = { connect: function() { var file = Components.classes["@mozilla.org/file/directory_service;1"] .getService(Components.interfaces.nsIProperties) .get("ProfD", Components.interfaces.nsIFile); file.append("имя_файла"); var storageService = Components.classes["@mozilla.org/storage/service;1"] .getService(Components.interfaces.mozIStorageService); return storageService.openDatabase(file); } } //запрос var statement = DB.connect().createStatement("SELECT * FROM users"); //ну и собственно выборка: while(statement.executeStep()) { var id = statement.row.id; var nick = statement.row.nick; }
Проверял через SQLite Manager - таблица существует и записи имеются.
Отсутствует
Выделить кодКод:
while(statement.executeStep()) { var id = statement.row.id; var nick = statement.row.nick; }
As you step through each row, you can obtain each parameter by name through a helper object in JavaScript (Requires Gecko 1.9.1) like so:
You can create this helper object yourself if it's not available in your version of Gecko. See mozIStorageStatementWrapper for details.
Выделено жирным мной .
Отредактировано luitzen (01-04-2010 17:56:31)
Отсутствует
developer.mozilla.org написал:As you step through each row, you can obtain each parameter by name through a helper object in JavaScript (Requires Gecko 1.9.1) like so:Код:while (statement.executeStep()) {
let value = statement.row.column_name;
}You can create this helper object yourself if it's not available in your version of Gecko. See mozIStorageStatementWrapper for details.Выделено жирным мной .
Отредактировано luitzen (Сегодня 17:53:55)
developer.mozilla.org написал:
As you step through each row, you can obtain each parameter by name through a helper object in JavaScript (Requires Gecko 1.9.1) like so:
Код:
while (statement.executeStep()) {
let value = statement.row.column_name;
}You can create this helper object yourself if it's not available in your version of Gecko. See mozIStorageStatementWrapper for details.
Выделено жирным мной .
А можно заюзать метод .step(), будет работать? Спасибо!
UPD: все, понятно, не поможет. Спасибо огрмное!
Отредактировано Neurostep (01-04-2010 18:02:50)
Отсутствует
А ещё AdCentrialIM удалите, он может в довольно неожиданных местах выстреливать, по слухам.
Хорошо, спасибо Вам еще раз! А не подскажете, какой метод лучше заюзать в моем случае для аналогичной выборки?
Отсутствует
Не знаю, не специалист . Попробуйте так как-нибудь:
while(statement.executeStep()) { var id = statement.getInt32(0); var nick = statement.getUTF8String(1); }
Наверное, можно порыться в истории той страницы, с которой цитата была.
Отредактировано luitzen (02-04-2010 01:07:47)
Отсутствует
Спасибо огромное, поищу)
Есть еще один вопрос, который не дает мне покоя: как же все-таки правильно и четко определить главное окно браузера? вот такая конструкция
var wm = Components.classes["@mozilla.org/appshell/window-mediator;1"] .getService(Components.interfaces.nsIWindowMediator); var browserWindow = wm.getMostRecentWindow("navigator:browser");
при каждом открытии нового окна браузера говорит что это "оно".
да и вот такая собственно тоже:
var mainWindow = window.QueryInterface(Components.interfaces.nsIInterfaceRequestor) .getInterface(Components.interfaces.nsIWebNavigation) .QueryInterface(Components.interfaces.nsIDocShellTreeItem) .rootTreeItem .QueryInterface(Components.interfaces.nsIInterfaceRequestor) .getInterface(Components.interfaces.nsIDOMWindow);
или пока windowtype не укажешь ничего с точностью в 100% определить не удастся?
Отсутствует
поищу)
А код с доставанием значения по номеру столбца и приведением к типу в 3.0 не работает?
как же все-таки правильно и четко определить главное окно браузера?
А какое окно вы называете главным? Допустим, мы открыли окно «Настройки», закрыли основное окно, в окне «Настройки» нажали «Справка». Какое окно является главным?
Или попробуйте идти до самого верха по .opener, всегда помня последнее окно с "navigator:browser".
Отсутствует
А код с доставанием значения по номеру столбца и приведением к типу в 3.0 не работает?
Работает замечательно!
А какое окно вы называете главным?
Когда мы только запустили браузер )
UPD: я так понял, что если .opener равен null, то это как раз то, что мне нужно, правильно?
UPD2: нет, не правильно
стоит такая задача, чтобы скрипт запускался только при загрузке "главного" окна. То есть скрипт не должен срабатывать при открытии других окон.
Отредактировано Neurostep (02-04-2010 11:56:58)
Отсутствует
То есть что-то должно делаться в окне только в том случае, если оно на момент запуска единственное? Как-то так, быть может:
var wm = Components.classes['@mozilla.org/appshell/window-mediator;1'].getService(Components.interfaces.nsIWindowMediator); var enum = wm.getEnumerator("navigator:browser"); enum.getNext(); if (!enum.hasMoreElements()) {alert('Мы первые!');}
Отредактировано luitzen (02-04-2010 13:33:58)
Отсутствует
Страницы: 1