在哪里调用navigator.registerProtocolHandler?

12

如何在哪里使用navigator.registerProtocolHandler让它起作用?

.

这个主题建议您调用以下函数来添加自定义协议处理程序:

navigator.registerProtocolHandler('web+custom', 'http://example.com/rph?q=%s', 'My App');

当我从控制台调用它时,我得到了

Uncaught DOMException: Failed to execute 'registerProtocolHandler' on 'Navigator': 
Can only register custom handler in the document's origin.

如果我将其作为内容脚本的一部分包含,正如此处建议的那样,也会发生这种情况。

install_protocol.html

<head>
  <title>Web Protocol Handler Sample - Register</title>
  <script type="text/javascript">
    navigator.registerProtocolHandler("burger",
                              "http://www.google.co.uk/?uri=%s",
                              "Burger handler");
  </script>
</head>

我还尝试在background.js脚本中调用它,在那里它没有出错,但是协议似乎没有响应。

.

您能解释一下如何在Chrome中注册和使用自定义协议的过程吗?

1个回答

13
如果您想注册与URL http://www.google.co.uk… 相关的处理程序,则调用 navigator.registerProtocolHanlder 的脚本必须从相同的域名加载,即 www.google.co.uk

我尝试在浏览器地址栏中运行以下代码:javascript:navigator.registerProtocolHandler("web+custom","https: //www.google.co.uk", "myApp")但是我遇到了以下语法错误:Uncaught SyntaxError: Failed to execute 'registerProtocolHandler' on 'Navigator': The url provided ('https://www.google.co.uk') does not contain '%s' - Voy
@Voy,%s是替换参数,它将注入冒号后面的位,例如'whatever'从customhandler:whatever注入到URL中。 - HaveAGuess
这是正确的,但为了进一步澄清,要使其工作-添加处理程序必须从控制台运行,同时您正在查看将处理的URL-在这种情况下是http://www.google.co.uk。 - jethar
你是我今天的英雄,谢谢,兄弟,节省了我很多工作 ✌ - chainstair

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接