Chromeのカスタムプロトコルハンドラー


88

Chromeでカスタムプロトコルハンドラーを設定するにはどうすればよいですか?何かのようなもの:

myprotocol:// testfile

http://example.com?query=testfileにリクエストを送信してから、拡張機能にhttpresponseを送信するには、これが必要になります。


Chromeは現在これをサポートしているとは思いません。拡張機能で使用できるAPIのセットはかなり限られています。
ウラジミールパラント2011

回答:


77

次のメソッドは、アプリケーションをURIスキームに登録します。したがって、HTMLコードでmycustproto:を使用して、ローカルアプリケーションをトリガーできます。GoogleChromeバージョン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はありません)。

このパスでこのファイルの「ローカル状態」を編集します。

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

または単に移動します:

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

次に、次の文字列を検索します:protocol_handler

そこからカスタムプロトコルが表示されます。

注:ファイルを編集する前に、GoogleChromeを閉じてください。そうしないと、行った変更がChromeによって上書きされます。

参照:

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


これは有望に見えますが、このアプローチを使用してタブレットから印刷できますか?もしそうなら、その場合のレジストリなどの処理方法
Venkat 2016

1
@Venkat最初にタブレット名とオペレーティングシステム(例:Surface、iPadなど)を指定し、他の人が以前にそれを行ったことがあるかどうかを確認する方が良いと思います。私が投稿したソリューションはWindows用でした。OSXとLinuxで同様の設定を見てきました。しかし、私はこれらのデバイス/環境を実験するのに便利ではありませんでした。最初にWindowsで試して、どのように機能するかについての基本的な考え方を理解することができます。これがお役に立てば幸いです。
Jun Xie

3
記録のために、私はファイルにprotocol_handler configオプションを作成しました。これはPreferences%localappdata%\Google\Chrome\User Data\Default
Babblo 2017年

Chrome内の1回のJavaScript呼び出しで複数のプロトコルを次々に呼び出すことができません。
プレム

キーがレジストリに見つからない場合はどうなりますか?ブラウザから、キーに基づいてアプリケーションを呼び出すように求めていますか?ここで、キーがレジストリに見つからないことをユーザーに通知するにはどうすればよいですか?
Akhil Nair 2018

55

Chrome13が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 2012年

3
どのようにtorrent:してsteam:リンクは、動作しますか?Chromeパッケージアプリにもこの制限がありますか?
スティーブンルーズ2014

1
@StevenRoose私が知る限り、ChromeはそれらをOSに渡します。chrome.webNavigationAPIを使用しても、tel:リンクが報告されることはありません。
PixnBits 2015年

これはChromeアプリ内では機能しないようで、アプリ内でプロトコルをリダイレクトできないようです。はるかに良い答えは、以下のゴードンウィリアムズの答えです。
カレルは、Bilek


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、アプリストアのアプリを紹介するウェブページをそこに作成することができます。


この答えをたくさんありがとう!上位投票の回答とは異なり、実際に質問に回答します。
カレルは、Bilek

10

これが私がやった方法です。アプリはインストール時にいくつかのregキーをインストールする必要があります。その後、どのブラウザーでもfoo:\ anythingHere.txtにリンクするだけで、アプリが開き、その値が渡されます。

これは私のコードではなく、同じ質問を検索したときにWebで見つけたものです。以下のテキストのすべての「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 2014年

1
@KjetilWatnedal:Chrome(少なくともv40 +)とこのソリューションで正常に動作します。最初の質問に関連して、OPは、明らかにローカルハンドラーアプリケーションなしで、ブラウザーがサイトに何かを自動的に送信することを望んでいましたが、実際には不可能かもしれません。
Marcel N.

7
彼のソリューションが実際にChromeで機能することをみんなに知らせたいと思います(今日49.0.2623.87でテストされています)。ただし、このプロトコルをブラウザー(foo:// C:/test.txt)に直接入力すると、ブラウザーがプロトコルをすぐに認識せず、検索プロトコルがインターセプトするため、ctrl + enterを使用する必要があることがわかりました。 OSができる前のアクション。ただし、リンクに配置することは正しく機能しました。
timmy 2016年

@ timmy-ありがとうございました!私はプロトコルハンドラーをクロムで動作させるために髪を引き裂いてきました-私がする必要があるのはCtrl + Enterを使用することだけでした!再度、感謝します!
レーン

@timmyどうもありがとうございました、私はすでに私のユーザーがInternet Explorerに固執しなければならないと思っていました
パイプ

2

これが私の答えに適しているかどうかはわかりませんが、役立つスレッドがほとんど見つからず、これもその1つだったので、ここに解決策を投稿します。

問題mailtoChromiumのリンクをクリックすると、Linux Mint 19.2Cinnamonで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」にあります。この除外されたスキームを削除して、Chromeをリセットし、デフォルトのアプリケーションでURLを開きます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.