2011-09-17 77 views
2

我正在研究一個Firefox擴展,它根據從服務器獲取的數據創建一個書籤菜單。我想爲每個菜單項添加圖標,但似乎無法讓它們顯示。我正在創建每個菜單項使用:Firefox擴展Menuitem圖像不顯示

Bookmarks.createMenuItem = function(item) { 
    var menuItem = document.createElementNS(Bookmarks.XUL_NS, "menuitem"); 
    menuItem.setAttribute("label", item.url_title); 
    menuItem.setAttribute("oncommand", "Bookmarks.openUrl('" + item.url + "');"); 
    menuItem.setAttribute("class", "bookmark-menu-item"); 
    if (item.favicon) { 
      menuItem.setAttribute("class", menuItem.getAttribute("class") + 
            " menuitem-iconic"); 
      menuItem.setAttribute("image", item.favicon); 
    } 

    return menuItem; 
}; 

menuitem工作得很好,只是它不顯示圖像。我已驗證每個圖像(從下面的代碼中的item.favicon)獲取的URL是可訪問的。

任何想法這裏有什麼問題嗎?我正在使用Firefox 6.0.2。

+0

您是否從網絡上的外部服務器即時獲取圖像?如果是,我不確定是否出於安全原因允許這樣做。也許嘗試將它們本地存儲爲base64編碼的字符串(這只是一個瘋狂的猜測)。 –

+0

我只是在我的擴展的內容目錄中放置了一個16x16 icon.png,然後嘗試了下面的image屬性:「icon.png」,「content/icon.png」,「bookmarks/content/icon.png」,「chrome ://bookmarks/content/icon.png」。我也嘗試通過menuItem.image而不是使用setAttribute()來設置它。這似乎沒有任何工作。我放入了一些警報來驗證menu屬性中是否設置了圖像屬性,並且它有一個「menuitem-iconic」類。 – erturne

+0

坦率地說,我在這裏看不到你的代碼有什麼問題。設置'menuitem-iconic'類和'image'屬性絕對適合我。 –

回答

1

我挑選的是在菜單項的圖標隨意擴展 - HttpFox - 有你有這樣的事情:

在XUL文件:

<menupopup id="toolsPopup"> 
    <menu id="hf_menu_HttpFox" 
     class="menu-iconic" 
     label="&browseroverlay.menutools.httpfox.label;" /> 
</menupopup> 

在CSS文件:

#hf_appmenu_HttpFox, #hf_menu_HttpFox, #hf_menu_webDeveloper_HttpFox { 
    list-style-image: url(chrome://httpfox/skin/globe16.png); 
} 

FoxSplitter中也是這樣。

所以基本上,如果style屬性允許菜單,您可以更改

menuItem.setAttribute("image", item.favicon); 

menuItem.setAttribute("style", "list-style-image: url(" + item.favicon + ")"); 

(如果item.favicon是URL),或者如果style不起作用,那麼爲每個項目創建類。 希望這有助於。

+0

在這種情況下,'image'屬性和'list-style-image' CSS屬性是完全等價的。 –