是否有方法像在firefox中那样注册带有google chrome扩展名的自定义协议(protocol):

const kSIMPLEURI_CONTRACTID = "@mozilla.org/network/simple-uri;1";
const kIOSERVICE_CONTRACTID = "@mozilla.org/network/io-service;1";
const nsISupports = Components.interfaces.nsISupports;
const nsIIOService = Components.interfaces.nsIIOService;
const nsIProtocolHandler = Components.interfaces.nsIProtocolHandler;
const nsIURI = Components.interfaces.nsIURI;

我想要协议(protocol):

xyz:

不是xyz://

这可能吗?

最佳答案

Chrome浏览器没有提供为xyz:方案设置自定义处理程序的方法。

但是,有一些方法可以模拟行为:

  • 使用Content脚本来设置事件监听器,以单击指向xyz:...的链接。
  • 使用webRequest API可以拦截所有请求并将其从默认搜索提供程序重定向到自定义URL。我正在使用这种方法来捕获通配符搜索关键字,但是它也可以用于支持伪造方案。不幸的是,该扩展名非常特定于用户的搜索设置,因为它会执行以下操作:
    Redirect http://google.com/search?q=xyz%3Awhatever
          to chrome-extension://.../whatever
    

  • 在这两种情况下,都不会在多功能框中显示xyz:whatever

    navigator.registerProtocolHandler 应该是注册xyz:处理程序的最佳方法。不幸的是,目前它是非常有限的。自定义协议(protocol)必须以web+为前缀。还请查看此API的list of open bugs

    关于google-chrome - Chrome扩展程序: Custom Protocol?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20836554/

    10-11 23:25
    查看更多