web-dev-qa-db-ja.com

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

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

myprotocol:// testfile

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

75
Test Tester

次のメソッドは、アプリケーションを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ページのリンクをクリックします:

警告ウィンドウのポップアップが初めて表示されます。

enter image description here

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。クロム。

参照:

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

66
Jun Xie

Chrome 13はnavigator.registerProtocolHandler AP​​Iをサポートするようになりました。例えば、

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

53
Boris Smus

この質問は今では古いものですが、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サイトを作成して、アプリストア内のアプリをユーザーに示すことができます。

29
Gordon Williams

これが私がやった方法です。アプリは、インストール時にいくつかの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\"" 
7
MuffinMan

開いた

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

Preferencesを開いてからexcluded_schemesを検索すると、 'protocol_handler'でこの除外スキームを削除してリセットしますchromeデフォルトのアプリケーションでURLを開きます

0