問題は、Chrome にローカル プロトコル ハンドラがない場合、ユーザーの環境で構成されたハンドラを使用したいということです。デフォルト ハンドラを起動するためのまったく同じ API を提供する OS は 2 つとありません。実際に起動する前にこのプログラムが何であるかを理解することは、Windows や Linux の明確な API でさえありません。
「Mac」と Windows の両方の実装は、どの外部アプリケーションが最終的にプロトコルを担当するかを認識しているため、呼び出しの警告を発行せずに未処理の呼び出しを抑制することができます。しかし、実際には、Windows の実装は、Windows 上の既存のバージョンでの Windows レジストリの観察に依存しているクラッジです。このタイプの API 違反は、多くのフレーバーが関連する設定ツールのフォークが大きく異なる Linux ではより危険です。
Windows と OsX が何も呼び出していないという別の警告を発行しないのは、実際にはバグと見なされるため、それが正しい動作であると思われる場合は、ここにコメントしてください。
これは、現在のソースに基づいて3つのシステムがどのように機能するかについての私の観察です。
Linux
Linux では、プロトコル ハンドラを (ウィンドウ) システムに登録するときは、次のようにします。
xdg-settings set default-url-scheme-handler myprotocol evolution.desktop
今、アプリケーションの進化はあなたのプロトコルを担当しており、何でも呼び出すことができます:
xdg-open myprotocol:...
これらのリンクで進化を開きます。他の OS にも同様のメカニズムがありますが、呼び出しスタブとして外部プログラムがない場合があります。
これは素晴らしく抽象的であり、呼び出している外部アプリが xdg-open であることを知っている/言っていると、Linux 実装の複雑さが大幅に回避されます。しかし、それはおそらくユーザーが望んでいる情報ではありません。その情報を取得するには、xdg-settings
代わりに使用する必要があり、このシステムのいくつかのフレーバーでデフォルトハンドラーを条件付きでオーバーライドする方法がある場合、またはその方法がある場合は、正しくないというリスクがあります。
ウィンドウズ
Windows ハンドラーでは、レジストリ内をスヌーピングして、API の呼び出しが実際に何をするかについて知識に基づいて推測できるようです。xdg-open
技術的には、クロムは外部プログラムを開く方法がシステム API を介して行われるため、これを行う必要があります。そのため、警告で参照されるような外部スタブはありません。
マック
「mac」ハンドラーには、特定の URL が起動するアプリについて問い合わせる適切な API があるため、chromeはそうします。アプリケーション名が空の文字列の場合、警告を生成する前に呼び出しを完全にドロップできます。