93

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

myprotocol:// testfile

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

4

7 に答える 7

83

次のメソッドは、アプリケーションを URI スキームに登録します。そのため、HTML コードでmycustproto:を使用して、ローカル アプリケーションをトリガーできます。Google Chrome バージョン 51.0.2704.79 m (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 でカスタム プロトコルを受け入れたことがあり、設定をリセットしたい場合は、次のようにします (現在、設定を変更するための UI は 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

于 2016-06-02T20:46:13.170 に答える
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を参照してください。

于 2011-08-18T00:54:38.623 に答える
31

この質問は古くなりましたが、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、アプリ ストア内のアプリにユーザーを誘導する Web ページを作成することはできます。

于 2014-03-25T16:40:58.723 に答える
11

これが私がやった方法です。アプリはインストール時にいくつかの 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\"" 
于 2014-02-21T17:12:20.610 に答える
0

Jun Hsieh と MuffinMan による解決策は、Chrome でページ上のリンクをクリックしたり、URL バーに貼り付けたりする場合に一般的に機能することがわかりましたが、コマンド ラインで文字列を渡すという特定のケースでは機能しないようです。 .

たとえば、次のコマンドはどちらも空白の 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 に http または https URL をフィードすると、Web ページが開かれます。

これが明らかになったのは、Chrome がデフォルトのブラウザーである場合、Adobe Reader 内に表示されている PDF から当社の製品へのリンクをクリックしても、当社の製品を起動できないというお客様の報告があったためです。(デフォルトとして MSIE と Firefox では問題なく動作しますが、Chrome または Edge のいずれかがデフォルトの場合は動作しません。)

Windows に URL を呼び出すように指示して Windows に判断させるのではなく、Adobe 製品がデフォルトのブラウザー (この場合は Chrome) を見つけて、コマンドラインで URL を渡しているのではないかと思います。

コマンドラインから提供された場合でも、Chromeがプロトコルハンドラーを完全に処理できるように、ここで関連する可能性のあるChromeセキュリティまたはその他の設定を知っている人がいれば、私は興味があります. 私は探してきましたが、これまでのところ何も見つかりませんでした。

これを Chrome 88.0.4324.182 に対してテストしてきました。

于 2021-02-17T04:17:04.153 に答える
-1

開いた

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

開いてPreferences検索するexcluded_schemesと、「protocol_handler」で見つかります。この除外されたスキームを削除して、クロムをリセットし、デフォルトのアプリケーションで URL を開く

于 2019-01-25T08:05:37.443 に答える