2010-09-26 2 views
10

Интересно, можно ли получить значения определенных настроек, заданных примерно: config с помощью javascript?о настройках конфигурации и js

Incentive предназначен для получения значений предпочтений, установленных в Firefox-аддоне, который я создал, когда пользователь приземлился на переднем конце аддона. В основном, я пытаюсь идентифицировать пользователей, приземляющихся на FE, не прося их явно войти.

ответ

8

Да, вы можете.

Во-первых, вам нужно знать, что Mozilla использует интерфейсы XPCOM для системы предпочтений.

Три используемые интерфейсы nsIPrefService, nsIPrefBranch и nsIPrefBranch2.

Служба настроек создается таким же образом, как и экземпляр любого XPCOM service.

Два примера, чтобы понять:

// Get the root branch 
var prefs = Components.classes["@mozilla.org/preferences-service;1"] 
        .getService(Components.interfaces.nsIPrefBranch); 

.

// Get the "extensions.myext." branch 
var prefs = Components.classes["@mozilla.org/preferences-service;1"] 
        .getService(Components.interfaces.nsIPrefService); 
prefs = prefs.getBranch("extensions.myext."); 

И есть 3 типа предпочтений, они строки, целого и булева. Есть шесть методов в nsIPrefBranch, что читать и писать предпочтения: getBoolPref(), setBoolPref(), getCharPref(), setCharPref(), getIntPref() и setIntPref().

Другие примеры на том, что:

// Get the "accessibility." branch 
var prefs = Components.classes["@mozilla.org/preferences-service;1"] 
        .getService(Components.interfaces.nsIPrefService).getBranch("accessibility."); 

// prefs is an nsIPrefBranch. 
// Look in the above section for examples of getting one. 
var value = prefs.getBoolPref("typeaheadfind"); // get a pref (accessibility.typeaheadfind) 
prefs.setBoolPref("typeaheadfind", !value); // set a pref (accessibility.typeaheadfind) 

Вы можете также использовать сложные типы. Используя nsISupportsString, который используется для обработки строк в настройках, используйте это, когда значение предпочтения может содержать символы, отличные от ASCII.

Пример:

// prefs is an nsIPrefBranch 

// Example 1: getting Unicode value 
var value = prefs.getComplexValue("preference.with.non.ascii.value", 
     Components.interfaces.nsISupportsString).data; 

// Example 2: setting Unicode value 
var str = Components.classes["@mozilla.org/supports-string;1"] 
     .createInstance(Components.interfaces.nsISupportsString); 
str.data = "some non-ascii text"; 
prefs.setComplexValue("preference.with.non.ascii.value", 
     Components.interfaces.nsISupportsString, str); 

Я надеюсь, вам решить ваши сомнения в этом.

Подробнее о this page.

+0

Firefox добавил модуль Service.jsm, который упрощает доступ ко всем интерфейсам: https://developer.mozilla.org/en/JavaScript/Code_modules/Services.jsm –

+0

Хммм, юридический, Спасибо за отзыв. ;) – Guilherme

+0

Спасибо за ответ. Этот метод, который я использовал на аддоне, чтобы сохранить предпочтения. Но это не работает для меня, так как этот код запускается в пространстве имен аддонов, и мне нужен был js, который будет загружен в FE и получить настройки из аддона. Это не допускается из пространства имен js без предупреждения пользователя о действии. Я постараюсь избежать изменения html со сценарием из аддона, но если я не найду другого решения, изменение html было бы приемлемым. –

Смежные вопросы