2012-10-16 66 views
1

我有一個Firefox擴展,實現了一堆可以從Firefox中的上下文菜單調用的小函數。我製作了一個首選項窗口,爲每個首選項顯示一個radiogroup,允許該功能顯示在Firefox主菜單中,顯示在由擴展程序創建的子菜單中,或隱藏。這對於每個擴展功能來說都是完全相同的,只改變以下內容:首選項ID,首選項名稱,被叫功能名稱和每個無線電組的標籤。是否可以爲每個函數創建包含這四個字符串的數組,然後動態定義所有的首選項,而不是爲每個首選項複製和粘貼相同的代碼?動態定義Firefox擴展首選項

我很確定可以動態地在我的偏好窗口中定義XUL。但是,我不確定使用pref()命令在默認文件夾中定義默認首選項(我不確定如何訪問擴展中其他位置定義的字符串)。我也不確定是否可以動態定義preferences.xul文件的定義,或者是否需要鍵入它們。

另外,你認爲這是個好主意還是壞主意?我認爲這會使添加/刪除功能更容易。

回答

1

聽起來對我來說是個好主意。您可以通過使用DOM函數(包括preferences.xul的內容,無論它們是什麼)創建XUL窗口的內容來動態執行靜態XUL文件中的任何操作。就默認值而言,如果尚未設置任何值,則可以在瀏覽器啓動時使用首選項API手動設置它們。您可以使用observer service來處理profile-after-change通知。使用preferences API來檢查您的首選項是否已經設置了值,如果沒有,則將它們設置爲您選擇的默認值。

要檢查pref是否已存在,請使用相應的nsIPrefBranch方法嘗試獲取它。如果拋出異常,則不存在。

+0

感謝您使用偏好設置API設置偏好的建議。我會嘗試。在回覆之前,我已經使用JSON將包含首選項的數組保存爲字符串,但能夠將它們保存爲單獨的首選項應該更清晰。 –

+0

使用變更後的配置文件通知來初始化首選項是否很重要?我的擴展有一個init()函數,由一個「加載」事件監聽器調用,所以我正在考慮將首選項設置在那裏。我將不得不詳細瞭解如何執行更改後的配置文件通知。 –

+0

我使用我的init()函數實現了我的動態首選項,並且所有內容似乎都能正常工作。只是爲了勾畫出以防萬一任何人在稍後看到:我將所有首選項存儲爲存儲爲主擴展對象中字段的字符串數組。然後我編寫了一個函數來循環這個數組,併爲每個字符串創建所有必要的XUL,並使用該字符串形成id,並將prefpane的onpaneload設置爲該函數。另一個函數遍歷數組,並在init()中將每個pref設置爲默認值(如果未設置)。 –