chrome中的自定义协议处理程序

Tes*_*ter 78 custom-protocol google-chrome-extension

如何在chrome中设置自定义协议处理程序?就像是:

myprotocol:// testfile的

我需要将此请求发送到http://example.com?query=testfile,然后将httpresponse发送到我的扩展程序.

Jun*_*Xie 69

以下方法将应用程序注册到URI方案.因此,您可以在HTML代码中使用mycustproto:来触发本地应用程序.它适用于Google Chrome版本51.0.2704.79 m(64位).

我主要使用这种方法静默打印文档,而不会弹出打印对话框.结果非常好,是将外部应用程序与浏览器集成的无缝解决方案.

HTML代码(简单):

<a href="mycustproto:Hello World">Click Me</a>
Run Code Online (Sandbox Code Playgroud)

HTML代码(替代):

<input id="DealerName" />
<button id="PrintBtn"></button>

$('#PrintBtn').on('click', function(event){
  event.preventDefault();
  window.location.href = 'mycustproto:dealer ' + $('#DealerName').val();
});
Run Code Online (Sandbox Code Playgroud)

URI Scheme将如下所示:

您可以在注册表中手动创建URI 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"
Run Code Online (Sandbox Code Playgroud)

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\""
Run Code Online (Sandbox Code Playgroud)

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();
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

尝试首先运行程序以确保程序已放置在正确的路径中:

cmd> "C:\Program Files\MyProgram\myprogram.exe" "mycustproto:Hello World"
Run Code Online (Sandbox Code Playgroud)

点击HTML页面上的链接:

您将第一次看到弹出警告窗口.

在此输入图像描述

要在Chrome中重置外部协议处理程序设置:

如果您曾在Chrome中接受自定义协议并希望重置设置,请执行此操作(目前,Chrome中没有用于更改设置的用户界面):

在此路径下编辑此文件的" 本地状态 ":

C:\Users\Username\AppData\Local\Google\Chrome\User Data\
Run Code Online (Sandbox Code Playgroud)

或者只是去:

%USERPROFILE%\AppData\Local\Google\Chrome\User Data\
Run Code Online (Sandbox Code Playgroud)

然后,搜索此字符串:protocol_handler

您将从那里看到自定义协议.

注意:在编辑文件之前,请关闭Google Chrome.否则,您所做的更改将被Chrome覆盖.

参考:

https://msdn.microsoft.com/en-us/library/aa767914(v=vs.85).aspx

  • 为了记录,我在`Preferences`文件中创建了*protocol_handler*config选项,位于`%localappdata%\ Google\Chrome\User Data\Default` (3认同)

Bor*_*mus 52

Chrome 13现在支持navigator.registerProtocolHandlerAPI.例如,

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

请注意,您的协议名称必须以web+常见的协议名称开头(例如mailto,等等).有关更多详细信息,请参阅:http://updates.html5rocks.com/2011/06/Registering-a-custom-protocol-handler

  • 对于协议必须以web +开头以避免"SECURITY_ERR:DOM Exception 18"的事实+1 (6认同)
  • 如何`torrent:`和`steam:`链接工作呢?Chrome Packaged Apps是否也有此限制? (3认同)

Gor*_*ams 29

这个问题现在已经过时了,但Chrome最近有一次更新(至少在打包的应用程序方面)......

http://developer.chrome.com/apps/manifest/url_handlers

https://github.com/GoogleChrome/chrome-app-samples/tree/master/samples/url-handler

它允许您注册URL的处理程序(只要您拥有它).可悲的是,myprotocol://但至少你可以做,http://myprotocol.mysite.com并且可以创建一个网页,将人们指向应用程序商店中的应用程序.


小智 8

这就是我做到的.您的应用程序需要在安装时安装一些注册表项,然后在任何浏览器中,您只需链接到foo:\ anythingHere.txt,它将打开您的应用程序并传递该值.

这不是我的代码,只是我在搜索相同问题时在网上找到的内容.只需将下面文本中的所有"foo"更改为您想要的协议名称,并将路径更改为您的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\"" 
Run Code Online (Sandbox Code Playgroud)

  • 我想让每个人都知道他的解决方案确实在Chrome中工作(今天在49.0.2623.87测试).但是,我确实发现如果你直接在浏览器中输入这个协议(foo:// C:/test.txt),你可能不得不使用ctrl + enter,因为浏览器没有立即识别协议和搜索协议拦截操作系统之前的操作可以.但是,将它放在链接中可以正常工作. (6认同)
  • 这在chrome中不起作用,这是具体的问题. (5认同)