更改运行firefox配置文件的图标

时间:2014-06-02 22:39:00

标签: firefox firefox-addon icons

我使用Win7但寻找跨操作系统解决方案,但这甚至不能在我的Win7中运行。我试图更改当前个人资料的图标。所以我做的是:

  1. 我创建了firefox.exe的快捷方式并将其移至我的文档
  2. 右键单击此快捷方式,然后更改图标
  3. 但是在firefox中,任务栏显示正常的firefox图标,左上角的图标也是如此(参见附图pz)
  4. 如何更改此图标?

    由于

    enter image description here

    这是我在ask.m.o上提出的另一个主题,试图提出同样的问题:https://ask.mozilla.org/question/725/custom-icon-per-profile/

3 个答案:

答案 0 :(得分:5)

从Firefox 57开始,扩展无法实现这一点。

WebExtensions不允许从扩展名更改窗口图标。

在Firefox 57之前(或具有旧版附加组件的非发行版本)

问题标题与问题文本的组合使得您不清楚自己希望实现的目标。

如果您的目标是动态更改当前运行的Firefox进程的窗口图标,那么您需要按照nmaier的答案中列出的第二种或第三种方法的内容进行操作

如果您的目标是始终使用不同的静态图标,用于特定配置文件的主要Firefox窗口,这非常容易。

您需要为每个体系结构使用适当格式的图标文件。

以下假设Windows,通过包含具有相同名称但具有适当文件扩展名和格式的图标文件,可以轻松扩展到其他体系结构。

创建一个简单的 overlay 提取扩展名。您至少需要2个文件:

  1. <扩展-DIR> instal.rdf
  2. <扩展-DIR> \铬\图标\默认\主window.ico
  3. 示例,功能齐全,install.rdf:

    <?xml version="1.0"?>
    <RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
         xmlns:em="http://www.mozilla.org/2004/em-rdf#">
        <Description about="urn:mozilla:install-manifest">
            <em:id>window-icon-change@nowhere.foo</em:id>
            <em:version>1.0.0</em:version>
            <em:name>Window icon change</em:name>
            <em:description>Change the Firefox main window icon.</em:description>
            <em:creator>Makyen</em:creator>
            <em:unpack>true</em:unpack>
            <em:targetApplication>
                <Description>
                    <em:id>{ec8030f7-c20a-464f-9b0e-13a3a9e97384}</em:id>
                    <em:minVersion>3.0a1</em:minVersion>
                    <em:maxVersion>43.0a1</em:maxVersion>
                </Description>
            </em:targetApplication>
        </Description>
    </RDF>
    

    注意:&#34;&lt; extension-dir&gt; \ chrome \ icons \ default \&#34;目录不同于nmaier响应中的目录。在那个回答中,&#34;图标&#34;和&#34;默认&#34;目录已反转,将无效。

    您可能需要一个额外的文件:
    &LT;扩展-DIR&GT; chrome.manifest用于
    chrome.manifest文件不是必需的。但是,没有它可能会导致单行被打印到错误/浏览器控制台(如果你打开它)。如果chrome.manifest文件存在,即使长度为零,控制台也不会抱怨文件无法读取。

    安装扩展程序。这样做的简单方法是使用这三个文件创建一个zip文件;然后将文件扩展名更改为.xpi;然后将其拖放到运行您希望安装它的配置文件的Firefox窗口中。

    您可以将其展开以包含所需子窗口的图标。您需要确定每个子窗口的ID。图标文件名只是窗口ID,在您想要的体系结构中具有适当的图标扩展名。 &#34;主窗口&#34;只是Firefox浏览器主窗口的ID。

    创建一个扩展来测试这个花了不到5分钟。你应该觉得它很容易实现。

    这假设在(Windows,默认安装位置)没有自定义主窗口图标:
    C:\ Program Files \ Mozilla Firefox \ browser \ chrome \ icons \ default
    因为该目录适用于所有配置文件,所以首先进行搜索。

    如果扩展程序无重启或无提取,则无效。

    您可以找到一小部分信息about window icons on MDN。 nmaier提到了谈论捆绑的文档。在谈论Mozilla附加组件时,请bundle is your add-on package.

    图标文件位于(Windows):
    &lt; profile dir&gt; \ extensions \&lt; extension-dir&gt; \ chrome \ icons \ default *
    安装扩展程序后,您可以根据需要手动更改扩展名,而无需重新安装。

    为解决此问题而创建的附加组件

    根据评论中的讨论,我创建了一个Firefox附加组件,允许设置配置文件的窗口图标。它在评论中提到的5分钟附加内容上得到了很大的扩展。添加完全在选项对话框的UI中,用于选择要使用的图标并将其分配给Firefox打开的各种不同窗口。您可以在Change Profile's Window Icons下的Mozilla附加组件中获取。不幸的是,它的不可能用于Firefox 48的附加功能,需要对附加组件进行签名。要动态更改图标,需要更改必须签名的文件。因此,无法通过所需的附加签名动态更改图标。

    相反,我创建了一些静态更改窗口图标的附加组件。 You can find them on AMO

答案 1 :(得分:4)

嗯,有一些方法让人想起,但都有自己的问题:

  1. 使用加载项提供的Window Icons安装到配置文件中(文档谈论捆绑包,但附加组件也可以使用此技术)。加载项必须为em:unpack,并且chrome/default/icons中的图标完全匹配。有问题的Firefox可能在$appdir/chrome/default/icons中捆绑了一组自己的图标,特别是在*nixthey are checked first之后,它们将被用来代替提供的附加组件加载项。因此,虽然这种方法适用于自定义附加窗口,但它可能不适用于内置窗口。
  2. 复制并修补Firefox本身,又名。大锤的方法。每个平台都有所不同(例如,在Windows下,您必须换出firefox.exe的图标资源)。
  3. 创建一个工具,用于切换正在运行的窗口的图标。在Firefox中没有可以通过javascript访问的代码,因此您需要使用二进制和特定于平台的代码,例如: Windows上的WM_SETICON
  4. 编辑1 : 实际上,考虑更多,我会安装一个附加组件,其中包含一些特定于平台的js-ctypes代码,然后可以切换出图标,例如Windows上已经提到的WM_SETICON

    通常,您需要一个平台API的窗口句柄,Firefox拒绝向JS提供。但作为解决方法:

    1. 存储窗口标题。
    2. 将窗口标题设置为新的uuid
    3. 调用平台API以在Windows上查找新的uuid标题窗口句柄(FindWindow)。 mintrayr使用此方案用于Windows / Gnome(GTK / GDK),也不用于js-ctypes。
    4. 恢复窗口标题。
    5. 将图标文件加载/转换为平台支持的内容(Windows上为HICON)。我曾经在bugzilla上的某处有一个补丁,可以将任意图像加载为窗口图标FWIW,但让它滑动。应该还是某个地方,可以指点一下。
    6. 使用获取的手柄切换图标。例如。在Windows上为小/大图标发送两个WM_SETICON
    7. 编辑2 事实证明,nsIBaseWindow这些天暴露了nativeHandle,正如我从其他问题中学到的那样。所以不再需要window-title-hack了。但是,nativeHandle可能是一个64位指针,在没有一些技巧的情况下,它在JS领域并不真正支持...更好的不是parseInt它...而且js数字是浮点数。< / p>

      ctypes.voidptr_t(ctypes.UInt64(nativeHandle))应该可行。

答案 2 :(得分:1)

在Mac OS X上,这个Firefox插件就是这样做的:https://addons.mozilla.org/en-US/firefox/addon/fosx-label/。同样在GitHub上:https://github.com/jf/fosx-label。感谢Noitidart指出这个非常有用的插件。

在Yosemite 10.10.5上测试过它完美无缺!