Как настроить собственный обработчик протокола в Chrome? Что-то типа:
мой протокол://тестовый файл
Мне нужно это, чтобы отправить запрос на http://example.com?query=testfile, а затем отправить httpответ на мое расширение.
Как настроить собственный обработчик протокола в Chrome? Что-то типа:
мой протокол://тестовый файл
Мне нужно это, чтобы отправить запрос на http://example.com?query=testfile, а затем отправить httpответ на мое расширение.
Следующий метод регистрирует приложение в схеме 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\""
Консольное приложение 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-странице:
Вы впервые увидите всплывающее окно с предупреждением.
Чтобы сбросить настройки обработчика внешнего протокола в Chrome:
Если вы когда-либо принимали пользовательский протокол в Chrome и хотели бы сбросить настройку, сделайте это (в настоящее время в Chrome нет пользовательского интерфейса для изменения настройки):
Отредактируйте файл Local State по этому пути:
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
Preferences
, расположенном по адресу %localappdata%\Google\Chrome\User Data\Default
.
- person Babblo; 24.11.2017
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
torrent:
и steam:
? Имеют ли упакованные приложения Chrome это ограничение?
- person Steven Roose; 18.08.2014
chrome.webNavigation
API никогда не сообщается о tel:
ссылках.
- person PixnBits; 05.03.2015
Этот вопрос уже устарел, но недавно было обновлено 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
и создать там веб-страницу, которая указывает людям на приложение в магазине приложений.
Вот как я это сделал. Вашему приложению потребуется установить несколько ключей reg при установке, затем в любом браузере вы можете просто сослаться на 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\""
Не уверен, что это подходящее место для моего ответа, но, поскольку я нашел очень мало полезных тем, и это была одна из них, я публикую здесь свое решение.
Проблема: я хотел, чтобы Linux Mint 19.2 Cinnamon открывал Evolution при нажатии на mailto
ссылки в Chromium. Gmail был зарегистрирован как обработчик по умолчанию в chrome://settings/handlers, и я не мог выбрать другой обработчик. .
Решение. Используйте настройки xdg в консоли.
xdg-settings set default-url-scheme-handler mailto org.gnome.Evolution.desktop
Решение найдено здесь https://alt.os.linux.ubuntu.narkive.com/U3Gy7inF/kubuntu-mailto-links-in-chrome-doesn-t-open-evolution и адаптирован для моего случая.
Я обнаружил, что решение Jun Hsieh и MuffinMan обычно работает, когда дело доходит до нажатия ссылок на страницах в Chrome или вставки в адресную строку, но оно не работает в конкретном случае передача строки в командной строке.
Например, обе следующие команды открывают пустое окно Chrome, которое затем ничего не делает.
"c:\Program Files (x86)\Google\Chrome\Application\chrome.exe" "foo://C:/test.txt"
"c:\Program Files (x86)\Google\Chrome\Application\chrome.exe" --new-window "foo://C:/test.txt"
Для сравнения, передача Chrome URL-адреса http или https с помощью любой из этих команд приводит к открытию веб-страницы.
Это стало очевидным, потому что один из наших клиентов сообщил, что при переходе по ссылкам на наш продукт из PDF-файла, отображаемого в Adobe Reader, наш продукт не вызывается, когда Chrome является браузером по умолчанию. (Он отлично работает с MSIE и Firefox по умолчанию, но не с Chrome или Edge по умолчанию.)
Я предполагаю, что вместо того, чтобы просто сказать Windows вызвать URL-адрес и позволить Windows разобраться, продукт Adobe находит браузер по умолчанию, которым в данном случае является Chrome, а затем передает URL-адрес в командной строке.
Мне было бы интересно, если кто-нибудь знает о безопасности Chrome или других настройках, которые могут иметь значение здесь, чтобы Chrome полностью обрабатывал обработчик протокола, даже если он предоставляется через командную строку. Я искал, но пока ничего не нашел.
Я тестировал это на Chrome 88.0.4324.182.
открыть
C:\Users\<Username>\AppData\Local\Google\Chrome\User Data\Default
откройте Preferences
, затем найдите excluded_schemes
, вы найдете его в «protocol_handler», удалите эту исключенную схему (ы), чтобы сбросить хром, чтобы открыть URL-адрес с приложением по умолчанию.