2014-10-17 140 views
2

我有一個自定義的URI是這樣的:將參數傳遞給自定義URI

Windows Registry Editor Version 5.00 

[HKEY_CLASSES_ROOT\Demo] 
@="URL:Demo Protocol" 
"URL Protocol"="" 

[HKEY_CLASSES_ROOT\Demo\DefaultIcon] 
@="\"D:\\demo.bat\"" 

[HKEY_CLASSES_ROOT\Demo\shell] 

[HKEY_CLASSES_ROOT\Demo\shell\open] 

[HKEY_CLASSES_ROOT\Demo\shell\open\command] 
@="\"D:\\demo.bat\" \"%1\" \"%2\" \"%3\" \"%4\"" 

對於從命令提示符下運行此,我用這個命令:

D:\demo.bat -ping -ip 172.18.102.65

但運行如果我使用自定義URI作爲Demo:,那麼它會要求我傳遞參數。如果我從瀏覽器運行它,我不知道如何將參數傳遞給自定義URI。

如何從瀏覽器運行此自定義uri時傳遞參數?請指教。

回答

1

當使用自定義URL時,整個 URL作爲單個參數傳遞到已註冊的應用程序/腳本。您的應用/腳本需要解析URL以提取所需內容。例如:

D:\demo.bat "demo:ping?ip=172.18.102.65" 

D:\demo.bat "demo:ping=172.18.102.65" 

D:\demo.bat "demo:ping%20172.18.102.65" 

更新:

[HKEY_CLASSES_ROOT\Demo\shell\open\command] 
@="\"D:\\demo.bat\" \"%1\"" 

可以,只要它是一個有效的網址,並用demo:開始,例如格式化網址,任何你想要的方式,但是請注意,這隻適用於Internet Explorer(和Windows資源管理器,以及Windows Shell)。您需要其他瀏覽器的另一個解決方案。例如,Firefox擁有自己的協議處理機制:

Web-based protocol handlers

Adding a New Protocol to Mozilla

Writing a Firefox Protocol Handler

+0

謝謝你的信息但不幸的是它不工作。當我在瀏覽器中運行這個URL'demo:ping?ip = 172.18.102.65'時,它不起作用。即使我在命令提示符下運行:'D:\ demo.bat「演示:ping?ip = 172.18.102.65」',它不起作用。請諮詢 – user182944 2014-10-17 15:04:32

+1

定義「不起作用」。你使用的是什麼瀏覽器? demo.bat實際收到什麼參數?您是否嘗試過其他網址格式?創建註冊表值後,您是否重新啓動機器? – 2014-10-17 15:44:47

+0

demo.bat接收三個參數:'-ping','-ip'和'172.18.102.65'。我試圖讓它在FIREfox瀏覽器中工作,但它不起作用。我嘗試用'%20'編碼'space',但徒勞無益。我多次重新啓動系統,但沒用。請讓我知道如何使它在FIrefox中工作。 – user182944 2014-10-18 15:15:13

2

這並不是說我要重新打開這樣一個老問題,但我一直在尋找一個更好的答案,這整個上午都沒有運氣。 OP很幸運,因爲他有一個可修改的批處理文件。但是,我想將URI添加到現有程序(putty)而無需安裝其他文件。

當我看到它們時,有兩個問題,第一個是完整的URI,包括作爲一個參數傳遞的協議。第二個是不能傳遞多個參數。

對於協議前綴的第一個解決方案,可以通過執行一些字符串操作來解決。這樣,在註冊表中的指令值的樣子:

cmd /V:ON /C "SET r=%1 & start D:\demo.bat !r:Demo:=!" 
  • /V:ON允許用於R!更換將延遲執行。
  • /C打開和關閉命令窗口。
  • 集合R =%1保存URI,它由當時的SET運行已經 被實際URI字符串替換
  • 開始啓動程序或批處理文件在這種情況下

的現在第二個解決方案,我們可以操縱字符串是做另一個替換,這雖然我肯定有一個更好的辦法,你可以只鏈中的內容替換在一起,就像這樣:

cmd /V:ON /C "SET r=%1 & SET s=!r:Demo:=! & start D:\demo.bat !s:_= !" 

這最後除了代替下劃線(_)與空格(),並通過使它們成爲空格使它們成爲用於調用demo.bat的單獨參數。 因此,運行:

D:\demo.bat -ping -ip 172.18.102.65 

你的URI是:

Demo:-ping_-ip_172.18.102.65 

注: 我會建議使用小寫的協議,但與OP的榜樣去爲一致性

+0

這是一個很好的答案。將參數傳遞給您無法控制的應用程序是一種有趣的情況,也可能是常見的情況。 – Farax 2017-12-06 03:14:49

相關問題