众所周知,Firefox没有扩展权限机制。所以没有人知道(包括Firefox)实际做什么扩展,它可以做任何它想要的(当然在api内)。
问题是关于扩展优先级。想象一下,用户安装了几个新标签扩展。他重启Firefox,新标签会起作用吗? 我试图搞清楚。
Firefox数据存储在C:\Users\UserName\AppData\Roaming\Mozilla\Firefox\Profiles\Whatever.default
中,还有extensions
目录,其中实际包含扩展数据。有关所有已安装扩展程序的部分数据存储在addons.json
和extensions.json
。
首先,安装顺序不起任何作用。之前安装的扩展程序可以"击败"稍后安装的扩展程序。反之亦然。
此外,我尝试启用/禁用扩展,查看上次更改的文件并进行比较。什么都没用。只需布尔标志,即启用或禁用该扩展,并由用户启用或禁用。
此外,我尝试更改addons.json
和extensions.json
中的扩展程序顺序,但似乎它可能不会影响任何内容。
大多数扩展,使用"低api"对新标签使用类似的代码:
var newtab = {
init: function ()
{
gBrowser.addEventListener("NewTab", newtab.opentab, false);
},
opentab: function (aEvent)
{
// action here
}
}
window.addEventListener( "load", newtab.init, false);
一些参考文献:
Firefox documentation. On page load. "Low" api style
Firefox documentation. sdk/tabs module. "High" api style
那么,您认为Firefox的扩展优先级如何运作?
是所有扩展程序接收事件(新标签页打开 - gBrowser" NewTab"低级别API中的事件,sdk / tabs中的onLoad / onReady / onActivate等)?以及Firefox如何决定处理哪些回调?或Firefox处理所有回调并显示最后一个的结果?如果这是真的,我认为不同的扩展之间存在竞争,有时会有不同的新标签。但总有稳定一个新的标签扩展正在运行。
会感激任何想法。
答案 0 :(得分:2)
没有可靠的,明显的"订单"。这取决于很多因素:
所以,基本上没有可靠的方式,附加作者可以真正,可靠地影响对她有利的事情(在游戏中有太多的实现细节)。
附加组件会尝试修改有限的资源(例如新的标签页,这实际上是一个简单的偏好;只能有一个),基本上会相互争斗。
但是,大多数情况下,附加组件可能会检测到某些事情正在发生(例如,检测到newtab页面已被覆盖,或者稍后再次被覆盖)并告诉用户可能存在是另一个附加干扰的问题。 ("亲爱的朋友;我们检测到您已经有一个新的标签附加组件;请禁用其他附加组件以使NewTabX正常运行。")
对于许多附加组件,这不是一个真正的问题,因为他们并没有真正使用有限的资源,或者在Firefox中有明确的方法让用户选择要使用的扩展名(例如,你有没有问题,当两个附加组件为同一网页链接添加上下文菜单时,用户只会看到两个可供选择的项目;"在附加组件ABC中下载&#34 ;;"在Add-下载在XYZ");
当然,当有一个真正有限的资源,比如唯一的newtab页面时,你最好不要安装多个newtab-page附加组件,否则事情可能会变得疯狂。
所有扩展程序接收事件(新选项卡是否已打开 - gBrowser" NewTab"事件处于低级api,onLoad / onReady / onActivate处于sdk / tabs等)?
使用通常的addEventListener
内容和SDK API:Yupp。如果两个东西覆盖浏览器DOM中相同的onxzy=
元素属性,那么当然不会;后者覆盖获胜。
根据DOM规范,Firefox如何决定处理哪些回调?
正常addEventListener
个订单。或者非DOM API使用的任何内容(FIFO,LIFO)。
或Firefox处理所有回调并显示最后一个的结果?
如果多个加载项从回调中修改相同的内容,则最后一个加载项获胜。但是,通常情况下,加载项会对同一事件做出不同的反应(例如,选项卡加载Greasemonkey可能会加载用户脚本,Adblock Plus会阻止某些元素,Linkify会链接文本链接等)。
这也是所有事件必须处理的原因,而Firefox不能也不会简单地选择并忽略其他事件。
如果这是真的,我认为不同的扩展之间会有比赛,有时会有不同的新标签。但总有一个新的标签扩展程序正在稳定运行。
是的。
大多数情况下,其他浏览器基本上与Firefox一样。 某些内部订单不一定是一成不变的,或者显而易见的,DOM事件(在网站中)将被分派到多个附加组件,多个附加组件可以将侦听器添加到其他内容(例如{ {1}})和最新/第一个加载项获胜,具体取决于API。
所有扩展尝试"拥有"有限的资源可能会与尝试执行相同操作的其他附加组件发生冲突。期待意外:p