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

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

№101-04-2010 17:33:13

Neurostep
Участник
 
Группа: Members
Зарегистрирован: 01-04-2010
Сообщений: 5
UA: Foxware 0.0

statement.row bug!

Привет всем! возникла такая ситуация. Я разрабатываю расширение для 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 - таблица существует и записи имеются.

Отсутствует

 

№201-04-2010 17:53:36

luitzen
Участник
 
Группа: Members
Зарегистрирован: 19-07-2008
Сообщений: 791
UA: Firefox 3.6

Re: statement.row bug!

Neurostep пишет
Выделить код

Код:

while(statement.executeStep()) {
        var id = statement.row.id;
        var nick = statement.row.nick;
}
https://developer.mozilla.org/en/Storage#section_12 пишет

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 (01-04-2010 17:56:31)

Отсутствует

 

№301-04-2010 17:55:57

Neurostep
Участник
 
Группа: Members
Зарегистрирован: 01-04-2010
Сообщений: 5
UA: Foxware 0.0

Re: statement.row bug!

luitzen пишет

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)

luitzen пишет

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)

Отсутствует

 

№401-04-2010 18:03:09

luitzen
Участник
 
Группа: Members
Зарегистрирован: 19-07-2008
Сообщений: 791
UA: Firefox 3.6

Re: statement.row bug!

А ещё AdCentrialIM удалите, он может в довольно неожиданных местах выстреливать, по слухам.

Отсутствует

 

№501-04-2010 18:12:45

Neurostep
Участник
 
Группа: Members
Зарегистрирован: 01-04-2010
Сообщений: 5
UA: Foxware 0.0

Re: statement.row bug!

luitzen пишет

А ещё AdCentrialIM удалите, он может в довольно неожиданных местах выстреливать, по слухам.

Хорошо, спасибо Вам еще раз!=) А не подскажете, какой метод лучше заюзать в моем случае для аналогичной выборки?

Отсутствует

 

№602-04-2010 00:49:37

luitzen
Участник
 
Группа: Members
Зарегистрирован: 19-07-2008
Сообщений: 791
UA: Firefox 3.6

Re: statement.row bug!

Не знаю, не специалист :). Попробуйте так как-нибудь:

Выделить код

Код:

while(statement.executeStep()) {
        var id = statement.getInt32(0);
        var nick = statement.getUTF8String(1);
}

Наверное, можно порыться в истории той страницы, с которой цитата была.

Отредактировано luitzen (02-04-2010 01:07:47)

Отсутствует

 

№702-04-2010 09:30:59

Neurostep
Участник
 
Группа: Members
Зарегистрирован: 01-04-2010
Сообщений: 5
UA: Foxware 0.0

Re: statement.row bug!

Спасибо огромное, поищу)
Есть еще один вопрос, который не дает мне покоя: как же все-таки правильно и четко определить главное окно браузера? вот такая конструкция

Выделить код

Код:

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% определить не удастся?

Отсутствует

 

№802-04-2010 11:40:32

luitzen
Участник
 
Группа: Members
Зарегистрирован: 19-07-2008
Сообщений: 791
UA: Firefox 3.6

Re: statement.row bug!

Neurostep пишет

поищу)

А код с доставанием значения по номеру столбца и приведением к типу в 3.0 не работает?

Neurostep пишет

как же все-таки правильно и четко определить главное окно браузера?

А какое окно вы называете главным? Допустим, мы открыли окно «Настройки», закрыли основное окно, в окне «Настройки» нажали «Справка». Какое окно является главным?

Или попробуйте идти до самого верха по .opener, всегда помня последнее окно с "navigator:browser".

Отсутствует

 

№902-04-2010 11:46:22

Neurostep
Участник
 
Группа: Members
Зарегистрирован: 01-04-2010
Сообщений: 5
UA: Foxware 0.0

Re: statement.row bug!

luitzen пишет

А код с доставанием значения по номеру столбца и приведением к типу в 3.0 не работает?

Работает замечательно!;)

luitzen пишет

А какое окно вы называете главным?

Когда мы только запустили браузер )

UPD: я так понял, что если .opener равен null, то это как раз то, что мне нужно, правильно?
UPD2: нет, не правильно:(

стоит такая задача, чтобы скрипт запускался только при загрузке "главного" окна. То есть скрипт не должен срабатывать при открытии других окон.

Отредактировано Neurostep (02-04-2010 11:56:58)

Отсутствует

 

№1002-04-2010 13:20:02

luitzen
Участник
 
Группа: Members
Зарегистрирован: 19-07-2008
Сообщений: 791
UA: Firefox 3.6

Re: statement.row bug!

То есть что-то должно делаться в окне только в том случае, если оно на момент запуска единственное? Как-то так, быть может:

Выделить код

Код:

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)

Отсутствует

 

Board footer

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