вторник, 13 апреля 2021 г.

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

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

myprotocol://testfile

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

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

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

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\""

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();
    }
  }
}

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

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

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

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

enter image description here

Чтобы сбросить настройки внешнего обработчика протокола в Chrome:

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

Отредактируйте "локальное состояние" этого файла по этому пути:

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

или просто пойти в:

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

Затем найдите эту строку: protocol_handler

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

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


Источники:

https://coderoad.ru/

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

https://github.com/Famlam/mailto-chromeextension/blob/master/docs/AddCustomUrl.md

Комментариев нет:

Отправка комментария