gpt4 book ai didi

javascript - 网络扩展 : Intercept special protocol links

转载 作者:行者123 更新时间:2023-11-29 14:38:47 25 4
gpt4 key购买 nike

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

起初我以为我可以使用registerProtocolHandler:

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

但我不认为这会达到我想要的效果...
我的下一个想法是对所有 a 元素使用点击事件:

document.getElementsByTagName('a').addEventListener('click', event => {
let link = event.target.href
if (link.startsWith('magnet://')) {
// handle magnet link
return false
}
}

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

最佳答案

我在扩展中使用了一个技巧来做到这一点:在 list 中注册您的协议(protocol)处理程序:

  "protocol_handlers": [
{
"protocol": "magnet",
"name": "Torrent Control Reloaded Magnet Handler",
"uriTemplate": "https://torrent-control-reloaded.invalid/%s"
}
]

然后根据需要处理请求:

   browser.webRequest.onBeforeRequest.addListener(
(details) => {
var parser = document.createElement('a');
parser.href = details.url;
var magnetUri = decodeURIComponent(parser.pathname).substr(1);
// do what you want with magnetUri
return {cancel: true}
},
{urls: ['https://torrent-control-reloaded.invalid/*']},
['blocking']
);

这不是很好,但它确实有效。您可以在此处找到扩展名:https://github.com/Mika-/torrent-control/

关于javascript - 网络扩展 : Intercept special protocol links,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41612792/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com