2012-08-23 53 views
3

我在使用自定義協議通過瀏覽器打開本地文件時遇到了一些實際問題。現在,在您爲自定義協議拍攝我之前,此Web應用程序將在封閉的Intranet環境中工作,因此我完全可以控制爲所有用戶添加這些協議。該應用程序目前工作正常,但我被要求繞過文件的打開/保存對話框,因爲它'煩人'和'耗時'(是的,我知道...我試圖告訴他們),所以在這裏我處於未知領域!使用自定義協議打開網址 - 語法錯誤?

這裏是那麼的有什麼不工作(我用記事本在這個例子中,以測試其在服務器2008 R2與IIS7)爲例:

使用信息上Registering an Application to a URL Protocol我已經添加下面的註冊表:

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> 

以下鏈接一樣方便,它幾乎工作 - 點擊次e鏈接,它立即打開記事本,但是我在記事本中出現了這個錯誤。

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

該文件將在該位置存在一定(我可以用它閱讀http: //localhost/openme.txt)和我一直試圖代表許多不同的格式,如描述here鏈接,但只是無法得到它工作。

任何想法我錯了嗎?

回答

3

很簡單,你混淆了你的兩種不同的協議。

您的協議 - 以及您傳遞給記事本的網址是opentxt://localhost/openme.txt。該文件的工作位置是http: //localhost/openme.txt。這兩個是不一樣的!

HTTP是操作系統本身可以理解的協議,因此,記事本可以將HTTP URL傳遞給操作系統,操作系統將依次使用端口80連接到localhost併發送對該資源的請求。該文件被返回,並且記事本有它的數據。這些都在定義HTTP行爲的操作系統庫中處理。

您的opentxt協議沒有這種支持,除非您對其進行編碼。記事本不知道如何處理它 - 所以你看到你的錯誤信息。

輕鬆處理這個問題的一種方法是創建自己的應用程序來處理協議。如果您通過註冊表連接了opentxtHandler.exe,則會通過opentxt://網址,然後可以適當地對其進行處理。這可能只是意味着將協議從opentxt更改爲http,然後將其傳遞到記事本 - 或者它可能更復雜一些。

+0

道歉 - 這是一個考慮不周的例子;當然這不起作用,我同意。 但是,即使將鏈接更改爲「Open File」和該位置的文件definitaly,我仍得到相同的結果。 也許你正在做某事。我一直在玩CustomURL,並且可以成功地手動推送這種類型的請求。我想知道是否需要攔截這些請求,然後在將它們發送到目標應用程序之前對它們進行清理,因爲正在輸出的內容和我期望輸出的內容必須不一樣。 – Kaitie

+0

隨着你提到的鏈接,記事本*仍然*通過完整的網址。記事本不知道如何處理'opentxt:// C:\ openme.txt' - 你需要一些東西在協議解除之前就解開它。 –

+0

謝謝丹 - 這正是我需要理解的。我沒有意識到協議也會在URL傳遞時保持連接狀態 - 刪除這些我確信我可以處理。 – Kaitie