Пользовательский обработчик протокола в хроме

Как настроить собственный обработчик протокола в хроме? Что-то вроде:

myprotocol://TestFile

Мне понадобится это, чтобы отправить запрос http://example.com?query=testfile, а затем отправить httpresponse моему расширению.

Ответ 1

Следующий метод регистрирует приложение в схеме URI. Таким образом, вы можете использовать mycustproto: в своем HTML-коде для запуска локального приложения. Он работает с версией Google Chrome версии 51.0.2704.79 м (64-разрядной).

В основном я использовал этот метод для печати документа без использования диалогового окна печати. Результат довольно хороший и представляет собой бесшовное решение для интеграции внешнего приложения с браузером.

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 будет выглядеть так:

Вы можете создать схему URI вручную в реестре или запустить файл "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\""

приложение консоли С# - 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();
    }
  }
}

Попробуйте сначала запустить программу, чтобы убедиться, что программа помещена в правильный путь:

cmd> "C:\Program Files\MyProgram\myprogram.exe" "mycustproto:Hello World"

Нажмите ссылку на HTML-странице:

В первый раз вы увидите всплывающее окно с предупреждением.

введите описание изображения здесь

В reset настройка обработчика внешних протоколов в Chrome:

Если вы когда-либо принимали пользовательский протокол в Chrome и хотели бы установить reset, сделайте это (в настоящее время в Chrome нет интерфейса для изменения настроек):

Изменить " Локальное состояние" в этом файле по этому пути:

C:\Users\Username\AppData\Local\Google\Chrome\User Data\

или просто перейдите по ссылке:

%USERPROFILE%\AppData\Local\Google\Chrome\User Data\

Затем выполните поиск этой строки: protocol_handler

Вы увидите там пользовательский протокол.

Примечание.. Прежде чем редактировать файл, закройте Google Chrome. В противном случае внесенное вами изменение будет перезаписано Chrome.

Справка:

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

Ответ 2

Chrome 13 теперь поддерживает API navigator.registerProtocolHandler. Например,

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

Ответ 3

Теперь этот вопрос устарел, но недавно появилось обновление 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 и можете создать там веб-страницу, которая указывает людей на приложение в магазине приложений.

Ответ 4

Вот как я это сделал. Вашему приложению потребуется установить несколько ключей реестра при установке, а затем в любом браузере вы можете просто ссылаться на файл foo:\anythingHere.txt, и он откроет ваше приложение и передаст его этому значению.

Это не мой код, только что я нашел в Интернете при поиске того же вопроса. Просто измените все "foo" в тексте ниже на нужное имя протокола и измените путь к вашему exe.

(поместите это в текстовый файл как save, как 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\"" 

Ответ 5

открыть

C:\Users\<Username>\AppData\Local\Google\Chrome\User Data\Default

откройте " Preferences затем найдите excluded_schemes вы найдете в "protocol_handler". Удалите эту исключенную схему (ы), чтобы сбросить Chrome, чтобы открыть URL с приложением по умолчанию.