是否有方法可以像在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;
我想要协议:
XYZ:
不是xyz://
这可能吗?
答案 0 :(得分:5)
Chrome不提供为xyz:
方案设置自定义处理程序的方法。
有一些方法可以模仿这种行为:
xyz:...
的链接点击设置事件监听器。使用webRequest
API拦截并将默认搜索提供商的所有请求重定向到自定义网址。我正在使用此方法来捕获通配符搜索关键字,但它也可用于支持虚假方案。不幸的是,扩展程序将非常特定于用户的搜索设置,因为它会执行以下操作:
Redirect http://google.com/search?q=xyz%3Awhatever
to chrome-extension://.../whatever
在这两种情况下,您都不会在多功能框中看到xyz:whatever
。
navigator.registerProtocolHandler
应该是注册xyz:
处理程序的最佳方式。不幸的是,目前它非常有限。自定义协议必须以web+
为前缀。另请查看此API的list of open bugs。
答案 1 :(得分:0)
新方法是使用 declarativeNetRequest
创建一个执行重定向的规则 rules.json
。
[
{
"id": 1,
"priority": 1,
"action": {
"type": "redirect",
"redirect": {
"regexSubstitution": "chrome-extension://xxxxxxxxxxxxxxxx/redirect.html#\\1"
}
},
"condition": {
"regexFilter": "^https://mohamedmansour.com/join/([\\w]+)",
"resourceTypes": ["main_frame"]
}
}
]
然后在您的 redirect.html
脚本中处理它,您可以使用 chrome.runtime.sendMessage 对其进行操作。
function closeCurrentTab() {
chrome.tabs.getCurrent(tab => chrome.tabs.remove(tab.id, () => {}))
}
if (location.hash)
chrome.runtime.sendMessage({ command: 'AppLink', data: location.hash }, () => closeCurrentTab())
else
closeCurrentTab()
这就是您可以使用虚假 URL 链接在扩展程序中进行应用深度链接的方法。