Chrome扩展程序:自定义协议?

Wes*_*ley 6 google-chrome google-chrome-extension

是否有方法可以像在Firefox中一样注册带有谷歌浏览器扩展的自定义协议:

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; 
Run Code Online (Sandbox Code Playgroud)

我想要协议:

XYZ:

不是xyz://

这可能吗?

Rob*_*b W 5

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

尽管有一些方法可以模拟行为:

  • 使用内容脚本为指向的链接的点击设置事件监听器xyz:...
  • 使用webRequestAPI拦截所有请求并将其从默认搜索提供程序重定向到自定义URL。我正在使用这种方法来捕获通配符搜索关键字,但是它也可以用于支持伪造方案。不幸的是,该扩展名非常特定于用户的搜索设置,因为它会执行以下操作:

    Redirect http://google.com/search?q=xyz%3Awhatever
          to chrome-extension://.../whatever
    
    Run Code Online (Sandbox Code Playgroud)

在这两种情况下,您都不会xyz:whatever在多功能框中看到

navigator.registerProtocolHandler应该是注册xyz:处理程序的最佳方法。不幸的是,目前它是非常有限的。自定义协议必须以开头web+。还请查看此API 的未解决错误列表

  • @Wesley:浏览器无法识别的任何链接都将委托给操作系统。`magnet:` 有一个由安装在您计算机上的应用程序注册的协议处理程序 - 该应用程序基本上要求在单击此类链接时启动。以这种方式注册协议处理程序的细节取决于操作系统。 (2认同)