Firefox addon 引导firefox插件中的自定义协议处理程序

Firefox addon 引导firefox插件中的自定义协议处理程序,firefox-addon,protocols,firefox-addon-restartless,Firefox Addon,Protocols,Firefox Addon Restartless,我正在编写一个引导Firefox插件,需要注册一个新的协议/模式处理程序(例如foo:somthing)。我已经浏览了所有地方,我只看到了使用chrome.manifest实现这一点的方法,而引导加载项无法使用这些方法 那么,是否有人知道在引导加载项中注册自定义协议处理程序的方法或可能方法?是的,但您必须完成加载项/组件管理器为您所做的工作,特别是自己调用.registerFactory 现在已经演示了如何在运行时自己注册组件,特别是协议处理程序。是的,但您必须完成附加组件/组件管理器为您所做的

我正在编写一个引导Firefox插件,需要注册一个新的协议/模式处理程序(例如
foo:somthing
)。我已经浏览了所有地方,我只看到了使用
chrome.manifest
实现这一点的方法,而引导加载项无法使用这些方法


那么,是否有人知道在引导加载项中注册自定义协议处理程序的方法或可能方法?

是的,但您必须完成加载项/组件管理器为您所做的工作,特别是自己调用
.registerFactory


现在已经演示了如何在运行时自己注册组件,特别是协议处理程序。

是的,但您必须完成附加组件/组件管理器为您所做的工作,特别是自己调用
.registerFactory


已经有人演示了如何在运行时注册组件,特别是协议处理程序。

虽然@nmair的答案是一个很好的一般性问题,但我能够找到更好的解决方案来解决我自己的问题。我注意到有一个HTML5方法,它会尝试要求用户注册协议/模式的处理程序,在
omni.ja
(firefox源代码)中进行选择后,我找到了它的定义。在胡乱摆弄之后,我写了以下内容:

var handler = Cc["@mozilla.org/uriloader/web-handler-app;1"]
    .createInstance(Ci.nsIWebHandlerApp);
handler.name='My Protocol';
handler.uriTemplate='chrome://myprotocol/content/launcher.xul#%s';

var eps=Cc["@mozilla.org/uriloader/external-protocol-service;1"].
    getService(Ci.nsIExternalProtocolService);
var handlerInfo=eps.getProtocolHandlerInfo('myprotocol');
handlerInfo.possibleApplicationHandlers.appendElement(handler, false);
handlerInfo.alwaysAskBeforeHandling=false;        // don't ask the user
handlerInfo.preferredApplicationHandler=handler;  // set my handler as default
hi=handlerInfo;

var hs=Cc["@mozilla.org/uriloader/handler-service;1"].
getService(Ci.nsIHandlerService);
hs.store(handlerInfo);

注册协议,无需重新启动或组件。

尽管@nmair的回答是一个好的一般性问题,但我能够找到更好的解决方案来解决我自己的问题。我注意到有一个HTML5方法,它会尝试要求用户注册协议/模式的处理程序,在
omni.ja
(firefox源代码)中进行选择后,我找到了它的定义。在胡乱摆弄之后,我写了以下内容:

var handler = Cc["@mozilla.org/uriloader/web-handler-app;1"]
    .createInstance(Ci.nsIWebHandlerApp);
handler.name='My Protocol';
handler.uriTemplate='chrome://myprotocol/content/launcher.xul#%s';

var eps=Cc["@mozilla.org/uriloader/external-protocol-service;1"].
    getService(Ci.nsIExternalProtocolService);
var handlerInfo=eps.getProtocolHandlerInfo('myprotocol');
handlerInfo.possibleApplicationHandlers.appendElement(handler, false);
handlerInfo.alwaysAskBeforeHandling=false;        // don't ask the user
handlerInfo.preferredApplicationHandler=handler;  // set my handler as default
hi=handlerInfo;

var hs=Cc["@mozilla.org/uriloader/handler-service;1"].
getService(Ci.nsIHandlerService);
hs.store(handlerInfo);
注册协议,无需重新启动或组件