对于FireFox Overlay,您如何指定要应用它的Gecko / FireFox版本?

时间:2011-06-03 23:04:47

标签: firefox firefox-addon xul

有一个作为应用程序一部分安装的插件,插件需要使用不同的叠加,具体取决于正在使用的FF版本,因为它修改了界面。

我发现https://developer.mozilla.org/en/Bundles指定了不同的文件,但这似乎只涵盖了哪个操作系统/位数。

有没有办法指定叠加层仅适用于特定版本的UI?

即。这适用于FF3.6及更早版本,但会破坏FF4

<overlay id="myOverlay"
    xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">

    <dialog id="commonDialog" onload="commonDialogOnLoad(); myLoad();"
        ondialogaccept="myAccept(); return commonDialogOnAccept();">

这是针对域名登录和FTP登录对话框,因此有关使其更具体的想法也可能有所帮助。

2 个答案:

答案 0 :(得分:1)

我自己没有这样做,但我认为您可以使用chrome.manifest文件中的标记来完成此效果。见https://developer.mozilla.org/en/Chrome_Registration#Manifest_flags

答案 1 :(得分:1)

从技术上讲,MatrixFrog的答案是正确的,你可以在chrome.manifest文件中使用标志。但是,您最好考虑一下这样一个事实:您的代码会向Firefox 4发出警告 - 不应使用此方法,这可能会破坏浏览器功能。另外,如果第二个扩展试图做同样的事情怎么办?您应扩展内置功能,而不是覆盖它。您的目标显然是在加载公共对话框时运行您自己的代码。请考虑以下方法:

<overlay id="myOverlay"
    xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">

    <script type="text/javascript"><![CDATA[
        window.addEventListener("load", function()
        {
            // Your code here
        }, false);
    ]]></script>
</overlay>

这解决了两个问题。首先,您不再需要覆盖“load”事件的现有处理程序 - addEventListener允许注册任意数量的事件处理程序,这与onload属性/属性不同。另一个问题是:您正在将函数myLoad()添加到公共对话框的全局命名空间中。如果Firefox代码或其他扩展程序决定将来使用相同的函数名称,则会出现问题。上面的代码通过使用匿名函数完全避免了这个问题 - 没有命名冲突。