2015-07-27 3 views
1

Я работаю над надстройкой как проектом для Firefox и не могу получить зависание аспекта onChange в модусе «простых префов».Ошибка «простой-prefs» Firefox

В настоящее время мое дополнение должно быть отключено и снова активировано для активации любых изменений.

Мой код:

var pref = require("sdk/simple-prefs").prefs; 

if (typeof onPrefChange == 'function') { 
    onPrefChange(); 
} else { 
    console.log(' Error Initiating') 
} 

const simplePrefs = require("sdk/simple-prefs"); 
simplePrefs.on("", onPrefChange); 


function onPrefChange(prefName) { 
    tabs.on("ready", function(tab) { 
    var host = tabs.activeTab.url; 
    var worker = tabs.activeTab.attach({ 
     contentScriptFile: self.data.url("docs.js") 
    }); 

    worker.port.on("data", function(response) { 
     var mixedcont = response; 

     console.log(simplePrefs.prefs.dismixed + ' onchange in func') 

     if (mixedcont === "true" && host.indexOf("https:") == 0 && 
      simplePrefs.prefs.dismixed === false && 
      simplePrefs.prefs.disapp === false && 
      pref.dismixed === false) 
     { 
     notificationmixed(host); 
     console.log(mixedcont + ' mixed content is found show notify ') 
     console.log(pref.dismixed + ' dismixed value from pref ') 
     console.log(simplePrefs.prefs.dismixed + ' dismixed value from SimplePrefs ') 
     console.log(host.indexOf("https:") + ' dismixed value from host ') 
     } else if (host.indexOf("https:") == 0 && 
       mixedcont === "false" && 
       simplePrefs.prefs.dissecure === false && 
       simplePrefs.prefs.disapp === false && 
       pref.dissecure === false) 
     { 
     notification(host); 
     } else { 
     console.log(host + ' could not determine ') 
     } 
    }); 
    }); 
} 

условные высказывания в мой код вызова различных функций в зависимости от простой прив настройки.

Как мой аддон может активировать эти изменения без необходимости их отключения и включения?

+0

Ваш код, который на самом деле читает предпочтения не в какой-либо функции обратного вызова (как 'onPrefChange'), так что я «Не знаю, почему вы ожидаете, что он будет выполнен при внесении изменений. Или проблема в том, что вы не получаете сообщение из 'console.log' в onPrefChange? – Nickolay

+0

Проблема, с которой я столкнулась, заключается в том, что если пользователь указывает флажок в «опциях» (надстройка Firefox), чтобы отключить определенное уведомление, чтобы этот параметр вступил в силу, пользователь должен сначала отключить мое дополнение и затем снова включите. – DaE

+0

ОК, так вы видите сообщение, которое вы регистрируете с помощью 'console.log'? Вам необходимо применить изменения к вашему коду в ответ на уведомление об изменении, а не только при запуске (это когда выполняется код верхнего уровня с вашими условными выражениями). – Nickolay

ответ

1

Подводя итог решения мы пришли в комментариях:

1) Вы не должны использовать require("sdk/simple-prefs").on(), если ваши предпочтения не влияют на состояние дополнения (видимость элемента пользовательского интерфейса, стиль и т. д.) и влияют только на то, как ваш код реагирует на события.

В этом случае вы можете просто получить текущее значение из настроек через require("sdk/simple-prefs").prefs.* каждый раз, когда вы обрабатываете событие.

2) Если вы прочитали значение из настроек и сохранили его где-нибудь (в переменной в вашем коде, изменив DOM или состояние виджета), вы должны его правильно обновить с помощью обработчика on().

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

Вы не должны кэшировать значение предпочтения в локальной переменной долгоживущей функции (например, tabs.on("ready", function() { var myCachedPref = ...; });), так как вы не сможете обновить ее от внешнего обработчика. Эту проблему можно решить, что, поставив отдельный прив обработчик изменения внутри долгоживущей функции:

tabs.on("ready", function(tab) { 
     var cachedPref = simplePrefs.prefs.myPref; 
     simplePrefs.on("", function(prefName) { 
     //update cachedPref as needed 
     }); 
Смежные вопросы