Chromeでカスタムプロトコルハンドラーを設定するにはどうすればよいですか?何かのようなもの:
myprotocol:// testfile
http://example.com?query=testfileにリクエストを送信してから、拡張機能にhttpresponseを送信するには、これが必要になります。
Chromeでカスタムプロトコルハンドラーを設定するにはどうすればよいですか?何かのようなもの:
myprotocol:// testfile
http://example.com?query=testfileにリクエストを送信してから、拡張機能にhttpresponseを送信するには、これが必要になります。
回答:
次のメソッドは、アプリケーションを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
Preferences
、%localappdata%\Google\Chrome\User Data\Default
Chrome13が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パッケージアプリにもこの制限がありますか?
chrome.webNavigation
APIを使用しても、tel:
リンクが報告されることはありません。
この質問は古いものですが、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にリンクするだけで、アプリが開き、その値が渡されます。
これは私のコードではなく、同じ質問を検索したときに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\""
これが私の答えに適しているかどうかはわかりませんが、役立つスレッドがほとんど見つからず、これもその1つだったので、ここに解決策を投稿します。
問題:mailto
Chromiumのリンクをクリックすると、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で見つかり、私の場合に適合しました。
開いた
C:\Users\<Username>\AppData\Local\Google\Chrome\User Data\Default
開いてPreferences
から検索するexcluded_schemes
と、「protocol_handler」にあります。この除外されたスキームを削除して、Chromeをリセットし、デフォルトのアプリケーションでURLを開きます。