Firefox 扩展菜单项图像不显示

发布于 2024-12-05 03:13:24 字数 821 浏览 3 评论 0原文

我正在开发一个 Firefox 扩展,它可以根据从服务器获取的数据创建书签菜单。我想为每个菜单项添加图标,但我似乎无法让它们显示。我正在使用以下方法创建每个菜单项:

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;
};

菜单项工作得很好,只是它不显示图像。我已经验证了为每个图像获取的 URL(来自下面代码中的 item.favicon)是可访问的。

知道这里出了什么问题吗?我使用的是火狐浏览器6.0.2。

I'm working on a Firefox extension that creates a menu of bookmarks from data fetched from a server. I'd like to add icons to each menuitem, but I can't seem to get them to display. I'm creating each menuitem using:

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;
};

The menuitem works just fine except that it doesn't display the image. I've verified the URLs that I'm getting for each image (from item.favicon in the code below) are accessible.

Any idea what's wrong here? I'm using Firefox 6.0.2.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

ζ澈沫 2024-12-12 03:13:25

我选择了在菜单项中有图标的随机扩展 - 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 不允许不起作用,然后为每个项目创建类。
希望这有帮助。

I've picked random extension that has icons in menu items - HttpFox - and there you have something like this:

in XUL file:

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

in CSS file:

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

In FoxSplitter it's the same way.

So basically, if style attribute is allowed for menus, you may change

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

to

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

(if item.favicon is the URL), or if style doesn't work, then create classes for each item.
Hope this helps.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文