크롬의 커스텀 프로토콜 핸들러


88

크롬에서 커스텀 프로토콜 핸들러를 어떻게 설정하나요? 다음과 같은 것 :

myprotocol : // testfile

http://example.com?query=testfile에 요청을 보낸 다음 내 확장에 httpresponse를 보내려면 이것이 필요합니다.


Chrome이 현재이를 지원한다고 생각하지 않습니다. 확장 프로그램에 사용할 수있는 API가 다소 제한되어 있습니다.
Wladimir Palant

답변:


77

다음 메서드는 응용 프로그램을 URI Scheme에 등록합니다. 따라서 HTML 코드에서 mycustproto : 를 사용 하여 로컬 애플리케이션을 트리거 할 수 있습니다 . Google Chrome 버전 51.0.2704.79m (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에는 설정을 변경할 수있는 UI가 없습니다).

이 경로에서 " Local State "이 파일을 편집하십시오 .

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

또는 다음으로 이동하십시오.

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

그런 다음 다음 문자열을 검색하십시오. protocol_handler

거기에서 사용자 지정 프로토콜을 볼 수 있습니다.

참고 : 파일을 편집하기 전에 Google 크롬을 닫으십시오. 그렇지 않으면 Chrome이 변경 한 내용을 덮어 씁니다.

참고:

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


이것은 유망 해 보입니다.이 방법을 사용하여 태블릿에서 인쇄 할 수 있습니까? 그렇다면 레지스트리 등을 처리하는 방법
Venkat

1
@Venkat 먼저 태블릿 이름과 운영 체제 (예 : Surface, iPad 등)를 지정하고 다른 사람들이 이전에 그렇게했는지 확인하는 것이 더 낫다고 생각합니다. 내가 게시 한 솔루션은 Windows 용이었습니다. OS X와 ​​Linux에서도 비슷한 설정을 보았습니다. 그러나 이러한 장치 / 환경을 실험하기에 편리하지 않았습니다. Windows에서 먼저 시도하여 작동 방식에 대한 기본 아이디어를 얻을 수 있습니다. 도움이 되길 바랍니다.
Jun Xie 2016 년

3
기록을 위해 파일에 있는 protocol_handler 구성 옵션을 Preferences발견했습니다.%localappdata%\Google\Chrome\User Data\Default
Babblo

크롬 내에서 단일 자바 스크립트 호출에서 여러 프로토콜을 차례로 호출 할 수 없습니다.
prem

레지스트리에서 내 키를 찾을 수 없으면 어떻게합니까? 브라우저에서 키를 기반으로 애플리케이션을 호출하도록 요청하고 있습니까? 여기서 레지스트리에서 키를 찾을 수 없음을 사용자에게 어떻게 알릴 수 있습니까?
Akhil Nair

55

Chrome 13은 이제 navigator.registerProtocolHandlerAPI를 지원합니다 . 예를 들면

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를 참조하십시오.


6
"SECURITY_ERR : DOM Exception 18"을 피하기 위해 프로토콜이 web +로 시작해야한다는 사실에 +1
Catch22

3
그러면 방법 torrent:steam:링크가 작동합니까? Chrome 패키지 앱에도이 제한이 있나요?
Steven Roose

1
@StevenRoose 내가 알 수 있듯이 Chrome은 OS로 전달합니다. chrome.webNavigationAPI를 사용하더라도 tel:링크는보고되지 않습니다.
PixnBits 2015 년

이것은 크롬 앱 내에서 작동하지 않는 것 같고 앱 내에서 프로토콜을 리디렉션 할 수없는 것 같습니다. 훨씬 더 나은 대답은 아래의 Gordon Williams 대답입니다.
Karel Bílek 2015 년


30

이 질문은 이제 오래되었지만 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수 있고 앱 스토어의 앱으로 사람들을 안내하는 웹 페이지를 만들 수 있습니다.


이 답변에 감사드립니다! 가장 많이 득표 한 답변과 달리 실제로 질문에 대한 답변입니다!
Karel Bílek 2015 년

10

이것이 내가 한 방법입니다. 앱은 설치시 몇 개의 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\"" 

5
이것은 크롬에서 작동하지 않습니다.
Kjetil Watnedal

1
@KjetilWatnedal : Chrome (적어도 v40 +에서는)과이 솔루션에서 잘 작동합니다. 초기 질문과 관련하여 OP는 브라우저가 로컬 처리기 응용 프로그램없이 자동으로 사이트에 무언가를 제출하기를 원했으며 실제로는 불가능할 수 있습니다.
Marcel N.

7
그의 솔루션이 실제로 Chrome에서 작동한다는 사실을 모든 사람에게 알리고 싶습니다 (현재 49.0.2623.87에서 테스트 됨). 그러나 브라우저 (foo : // C : /test.txt)에이 프로토콜을 직접 입력하면 브라우저가 즉시 프로토콜을 인식하지 못하고 검색 프로토콜이 가로 채기 때문에 ctrl + enter를 사용해야 할 수 있음을 발견했습니다. OS가 할 수있는 행동. 그래도 링크에 넣으면 제대로 작동했습니다.
timmy

@timmy-정말 감사합니다! 나는 크롬에서 프로토콜 핸들러를 작동 시키려고 머리를 찢어 버렸다-내가해야 할 일은 Ctrl + Enter를 사용하는 것 뿐이었다! 다시 한 번 감사드립니다!
레인

@timmy는, 정말 감사합니다 나는 이미 내 사용자가 인터넷 익스플로러에 충실해야 할 것입니다 생각
파이프

2

이것이 내 답변에 적합한 장소인지 확실하지 않지만 유용한 스레드가 거의없고 그중 하나 였으므로 여기에 솔루션을 게시하고 있습니다.

문제 : mailtoChromium 에서 링크를 클릭 할 때 Linux Mint 19.2 Cinnamon이 Evolution을 열도록하고 싶었습니다 . Gmail은 chrome : // settings / handlers 에 기본 핸들러로 등록되어 있으며 다른 핸들러를 선택할 수 없습니다.

해결 방법 : 콘솔에서 xdg-settings 사용

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 에서 발견 되었으며 제 경우에 적용되었습니다.


0

열다

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

Preferences을 검색 한 후 excluded_schemes당신은 'protocol_handler'에서 그것을 발견 할 것이다 기본 응용 프로그램으로 열기 URL로 크롬을 재설정이 제외 기법을 삭제

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.