我想写一个简单的WebExtension来处理某些类型的链接。我不需要系统范围的协议(protocol)处理程序,它应该只适用于在浏览器中打开的网站。
因此,例如,当任何事情导致打开magnet://链接时,我想对其进行拦截,以便WebExtension对其进行处理。
而且,如果可能的话,我想阻止系统应用程序在启用WebExtension的情况下对其进行处理。

起初我以为可以使用registerProtocolHandler:

navigator.registerProtocolHandler("magnet", "*%s", "Magnet handler");

但是我不认为这会实现我想要的...
我的下一个想法是在所有a元素上使用click事件:
document.getElementsByTagName('a').addEventListener('click', event => {
    let link = event.target.href
    if (link.startsWith('magnet://')) {
        // handle magnet link
        return false
    }
}

但这仅适用于被单击的链接。使用JavaScript打开的链接不会受到影响,因此也不起作用。

最佳答案

目前正在进行支持定制协议(protocol)处理程序的工作:
https://bugzilla.mozilla.org/show_bug.cgi?id=1271553

10-02 04:38