4

カスタムプロトコルを使用してブラウザ経由でローカルファイルを開く際に、いくつかの実際の問題が発生しています。カスタムプロトコルを使用する前に、このWebアプリは閉じたイントラネット環境で動作するため、すべてのユーザーにこれらのプロトコルを追加するための完全な制御が可能です。アプリは現時点では正常に動作しますが、「煩わしい」「時間がかかる」ため、ファイルの[開く/保存]ダイアログをバイパスするように要求されました(ええ、私は知っています...私はそれらに伝えようとしました)。私は未知の領域にいます!

次に、機能しない例を示します(この例では、メモ帳を使用して、IIS7を搭載したServer 2008 R2でテストしています)。

URLプロトコルへのアプリケーションの登録に関する情報を使用して、レジストリに以下を追加しました。

HKEY_CLASSES_ROOT
 opentxt
      (Default) = "URL:opentxt Protocol"
      URL Protocol = ""
      DefaultIcon
           (Default) = "C:\Windows\System32\notepad.exe,1"
      shell
           open
                command
                     (Default) = "C:\Windows\System32\notepad.exe" "%1"

だから今、理論的には、私のhtmlに次のリンクがあるのと同じくらい簡単なはずです

<a href="opentxt://localhost/openme.txt">Open File</a> 

そして、それはほとんど機能します-リンクをクリックすると、すぐにメモ帳が開きますが、メモ帳にこのエラーが表示されます。

The filename, directory name, or volume label syntax is incorrect

ファイルは間違いなくその場所に存在し(を使用して読み取ることができます)、ここでhttp: //localhost/openme.txt説明するように、リンクをさまざまな形式で表現しようとしましたが、機能させることができません。

私が間違っているアイデアはありますか?

4

1 に答える 1

3

簡単に言うと、2つの異なるプロトコルを混同しています。

プロトコル(およびメモ帳に渡すURL)はですopentxt://localhost/openme.txt。ファイルの作業場所はですhttp: //localhost/openme.txt。これら2つは同じではありません!

HTTPは、オペレーティングシステムによってネイティブに理解されるプロトコルであるため、メモ帳はHTTP Urlをオペレーティングシステムに渡すことができます。オペレーティングシステムは、localhostポート80を使用して接続し、そのリソースの要求を送信します。ファイルが返され、メモ帳にデータがあります。これはすべて、HTTPの動作を定義するオペレーティングシステムライブラリ内で処理されます。

あなたopentxtがそれをコーディングしない限り、あなたのプロトコルはこのサポートを持っていません。メモ帳はそれをどうするかわからないので、エラーメッセージが表示されます。

これを簡単に処理する方法は、プロトコルを処理する独自のアプリケーションを作成することです。レジストリを介して配線されている場合opentxtHandler.exeは、URLが渡され、opentxt://適切に処理できます。これは、プロトコルをからopentxtに変更しhttpてからメモ帳に渡すことを意味する場合もありますが、もっと複雑な場合もあります。

于 2012-08-23T10:35:19.407 に答える