自定义协议处理程序在铬
如何在Chrome中设置自定义协议处理程序? 就像是:
myprotocol:// testfile的
我需要这个发送请求到http://example.com?query=testfile ,然后发送httpresponse到我的扩展。
Chrome 13现在支持navigator.registerProtocolHandler
API。 例如,
navigator.registerProtocolHandler( 'web+custom', 'http://example.com/rph?q=%s', 'My App');
请注意,你的协议名称必须以web+
开头,除了一些常见的例外(如mailto
等)。 有关更多详细信息,请参阅: http : //updates.html5rocks.com/2011/06/Registering-a-custom-protocol-handler
以下方法将应用程序注册到URIscheme。 所以,你可以使用mycustproto:在你的HTML代码中触发一个本地应用程序。 它可以在Google Chrome 51.0.2704.79 m(64位)上运行。
我主要使用这种方法来静默打印文档,而不popup打印对话框。 结果非常好,是一个将外部应用程序与浏览器集成的无缝解决scheme。
HTML代码(简单):
<a href="mycustproto:Hello World">Click Me</a>
HTML代码(可选):
<input id="DealerName" /> <button id="PrintBtn"></button> $('#PrintBtn').on('click', function(event){ event.preventDefault(); window.location.href = 'mycustproto:dealer ' + $('#DealerName').val(); });
URI Scheme如下所示:
您可以在registry中手动创buildURI Scheme,也可以运行“mycustproto.reg”文件(见下文)。
HKEY_CURRENT_USER\Software\Classes mycustproto (Default) = "URL:MyCustProto Protocol" URL Protocol = "" DefaultIcon (Default) = "myprogram.exe,1" shell open command (Default) = "C:\Program Files\MyProgram\myprogram.exe" "%1"
mycustproto.reg例子:
Windows Registry Editor Version 5.00 [HKEY_CURRENT_USER\Software\Classes\mycustproto] "URL Protocol"="\"\"" @="\"URL:MyCustProto Protocol\"" [HKEY_CURRENT_USER\Software\Classes\mycustproto\DefaultIcon] @="\"mycustproto.exe,1\"" [HKEY_CURRENT_USER\Software\Classes\mycustproto\shell] [HKEY_CURRENT_USER\Software\Classes\mycustproto\shell\open] [HKEY_CURRENT_USER\Software\Classes\mycustproto\shell\open\command] @="\"C:\\Program Files\\MyProgram\\myprogram.exe\" \"%1\""
C#控制台应用程序 – myprogram.exe:
using System; using System.Collections.Generic; using System.Text; namespace myprogram { class Program { static string ProcessInput(string s) { // TODO Verify and validate the input // string as appropriate for your application. return s; } static void Main(string[] args) { Console.WriteLine("Raw command-line: \n\t" + Environment.CommandLine); Console.WriteLine("\n\nArguments:\n"); foreach (string s in args) { Console.WriteLine("\t" + ProcessInput(s)); } Console.WriteLine("\nPress any key to continue..."); Console.ReadKey(); } } }
尝试先运行该程序,以确保程序已放置在正确的path中:
cmd> "C:\Program Files\MyProgram\myprogram.exe" "mycustproto:Hello World"
点击您的HTML页面上的链接:
您将会看到第一次popup警告窗口。
在Chrome中重置外部协议处理程序设置:
如果您曾经在Chrome中接受过自定义协议,并想要重置设置,请执行此操作(目前,Chrome中没有用户界面来更改设置):
在这个path下编辑“ Local State ”这个文件:
C:\Users\Username\AppData\Local\Google\Chrome\User Data\
或者只需转到:
%USERPROFILE%\AppData\Local\Google\Chrome\User Data\
然后,search这个string: protocol_handler
您将从那里看到自定义协议。
注意:在编辑文件之前请closures您的Google Chrome浏览器。 否则,您所做的更改将被Chrome覆盖。
参考:
https://msdn.microsoft.com/en-us/library/aa767914(v=vs.85).aspx
现在这个问题已经很老了,但是最近Chrome已经有了一个更新(至less在打包的应用程序方面)…
http://developer.chrome.com/apps/manifest/url_handlers
和
https://github.com/GoogleChrome/chrome-app-samples/tree/master/samples/url-handler
它允许你注册一个URL处理程序(只要你拥有它)。 可悲的是没有我的myprotocol://
但至less你可以做http://myprotocol.mysite.com
并可以创build一个网页,指向人在应用程序商店的应用程序。
我就是这么做的 你的应用程序需要安装几个registry键,然后在任何浏览器中,你可以链接到foo:\ anythingHere.txt,它会打开你的应用程序,并传递它的价值。
这不是我的代码,只是在search同一个问题时在网上find的东西。 只需将下面的文本中的所有“foo”更改为所需的协议名称,并将path更改为您的exe文件。
(把它放在一个文本文件中,保存为桌面上的foo.reg,然后双击它来安装键)—–这行下面是.reg文件(不包括这行)— —
REGEDIT4 [HKEY_CLASSES_ROOT\foo] @="URL:foo Protocol" "URL Protocol"="" [HKEY_CLASSES_ROOT\foo\shell] [HKEY_CLASSES_ROOT\foo\shell\open] [HKEY_CLASSES_ROOT\foo\shell\open\command] @="\"C:\\Program Files (x86)\\Notepad++\\notepad++.exe\" \"%1\""