2012-04-10 51 views
0

我正在爲客戶開發一個工具欄,它希望地址欄下方窗口頂部有一個傳統的IE樣式工具欄。Firefox 11+附加SDK可以在地址欄下方的窗口頂部創建工具欄嗎?

這是我有: What I have http://www.hellometro.com/toolbar/now.png

注意,因爲在狀態欄的垂直限制我在所有大寫寫的字母清晰可辨,同時足夠小,以適應。 (二留在狀態欄,文本框和搜索按鈕大多數元素)

這就是我需要: What I need http://www.hellometro.com/toolbar/whatiwant.png

通知工具欄添加到具有文本字段中清晰的文本和足夠的垂直空間,頂部按鈕。 (瀏覽器後退按鈕的左上角)。

我正在尋找一種將狀態欄中的搜索組件定位爲默認位置的方法,並允許用戶在選項頁面中更改其位置,讓他們選擇頂部或底部(因爲如果不是最多Firefox用戶不知道他們可以移動附加組件)。

我的問題是:Firefox附加SDK是否支持我想要做的事情,還是必須從不同角度切換語言和解決方案?

回答

5

這不是你可以用可用的附加SDK API做的事情,有很好的理由 - 附加組件不應該浪費屏幕空間不必要的東西,並且添加工具欄就是這樣。您可以通過使用低級模塊並直接訪問瀏覽器的XUL來實現此目標。像這樣的東西應該工作(未經測試的代碼和非常哈克):

var widgetID = "foobar"; 
var buttonID = "widget:" + require("self").id + "-" + widgetID; 
var toolbarName = "My Extension Toolbar"; 
require("widget").Widget({ 
    id: widgetID, 
    ... 
}); 

if (firstRun) 
{ 
    var winUtils = require("window-utils"); 
    for (var window in winUtils.browserWindowIterator()) 
    { 
    var toolbox = window.gNavToolbox; 
    if (toolbox) 
    { 
     // Does the button exist already? 
     var button = toolbox.ownerDocument.getElementById(buttonID); 
     if (button && button.parentNode.getAttribute("toolbarname") == toolbarName) 
     continue; // Button already in the right toolbar 
     else if (button) 
     { 
     // Remove button from its current location 
     var toolbar = button.parentNode; 
     toolbar.removeChild(button); 

     // Make sure this change is persisted 
     toolbar.setAttribute("currentset", toolbar.currentSet); 
     toolbar.ownerDocument.persist(toolbar.id, "currentset"); 
     } 

     var toolbar = toolbox.appendCustomToolbar("My Extension Toolbar", buttonID); 
     toolbar.currentSet = toolbar.getAttribute("currentset"); 
     toolbar.ownerDocument.persist(toolbar.id, "currentset"); 

     // Send change notification, the widget needs reinitializing 
     var event = toolbox.ownerDocument.createEvent("Events"); 
     event.initEvent("customizationchange", true, true); 
     toolbox.dispatchEvent(event); 
    } 
    } 
} 

注未定義firstRun變量 - 你想這樣做一次,否則你將恢復用戶的選擇移動到別處的小部件(可以通過simple-prefs模塊或類似的東西存儲一個標誌)。另請注意,buttonID計算使用SDK中addon-kit/lib/widget.js文件的內部詳細信息 - 計算工具欄按鈕ID的方式可能會在將來的SDK版本中發生變化,但我認爲這是獲取您創建的窗口小部件的唯一方法SDK。當然,代碼的其他部分還有很多內部元素。

文檔:window-utils modulebrowserWindowIterator未記錄),<xul:toolbox><xul:toolbar>

+0

試圖使用你的建議,我意外地創建了兩個工具欄具有相同的名稱。現在工具欄佈局...呈灰色顯示。我可以在哪裏刪除我的兩個同名的自定義工具欄? – 2012-04-18 13:13:46

+0

沒關係刪除重複項。我關閉了Firefox並重新打開它,它合併了兩個具有相同名稱的工具欄(或者至少刪除了第二個)。 – 2012-04-18 13:23:52

+0

好的,我把它放到我的代碼中,但它只能成功地創建自定義工具欄並從附加工具欄中刪除該小部件。該小部件從不出現在新的自定義工具欄上。 – 2012-04-18 13:51:47

相關問題