在Chrome瀏覽器中點擊連接,打開IE瀏覽器,跳轉到指定頁面並傳遞參數

需求:

在Chrome瀏覽器中點擊連接,打開IE瀏覽器,跳轉到指定頁面並傳遞參數

shell

過程:
一些應用軟件能夠經過點擊URL連接啓動並執行操做(例如迅雷),這是如何作到的呢?
主要是經過修改註冊表,註冊URL Protocol。
 
階段一:點擊連接,打開IE瀏覽器,並傳遞單個參數
 
新建 alert.reg
Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\alert]
@="URL: Alert Protocol"
"URL Protocol"=""

[HKEY_CLASSES_ROOT\alert\DefaultIcon]
@="iexplore.exe,1"

[HKEY_CLASSES_ROOT\alert\shell]

[HKEY_CLASSES_ROOT\alert\shell\open]

[HKEY_CLASSES_ROOT\alert\shell\open\command]
@=" cmd /c set m=%1 & call set m=%%m:alert:=%% & call \"C:\\Program Files\\Internet Explorer\\iexplore.exe\" %%m%%"

 

註釋:
set m=%1(%1爲傳遞過來的參數,將其賦給變量m)
set m=%%m:alert:=%% (將前綴alert: 清除)
"C:\\Program Files\\InternetExplorer\\iexplore.exe" %%m%% (打開IE 瀏覽器並跳轉到指定頁面)

 

測試連接:
<a href="alert://www.baidu.com?a=1" />test

 

運行效果:
 

 

打開IE瀏覽器並傳遞參數a成功!

 

階段二:傳遞多個參數
測試連接:
<a href="alert://www.baidu.com?a=1&b=2" />test

運行效果:
 

參數b傳遞失敗


修改alert.reg瀏覽器

[HKEY_CLASSES_ROOT\alert\shell\open\command]@="cmd /c set m=%1 & echo 1的值:%1 & call echo m的值:%%m%% & call set m=%%m:alert:=%% & call \"C:\\Program Files\\Internet Explorer\\iexplore.exe\" %%m%% & exit"


運行效果測試

 
 
緣由分析:
set m=%1,此處%1會直接替換成alert://www.baidu.com?a=1&b=2,&符號將之分爲兩個命令,m=alert://www.baidu.com?a=1b=2

看來特殊符號&是沒法直接傳遞了,因而想到了用自定義的分隔字符串separator來替代&符號,並在傳遞給IE前,將其替換回&符號。

修改alert.regspa

[HKEY_CLASSES_ROOT\alert\shell\open\command]
@="cmd /c set m=%1 & call set m=%%m:alert:=%% & call set m=\"%%m:separator=&%%\" & call \"C:\\Program Files\\Internet Explorer\\iexplore.exe\" %%m%%"


測試連接:ci

<a href="alert://www.baidu.com?a=1separatorb=2" />test


運行效果:字符串

 


參數b傳遞成功!

本覺得能夠功成身退了,卻發現個詭異的現象。
第一次點擊測試連接OK,不關閉IE的狀況下再次點擊連接,新彈出的IE地址有誤,效果以下:cmd

 

地址欄變爲了:http://%22//www.baidu.com/?a=1&b=2%20%20"

修改alert.regit

[HKEY_CLASSES_ROOT\alert\shell\open\command]
@="cmd /c set m=%1 & call set m=%%m:alert:=%% & call echo 第一次替換:%%m%% & call set m=\"%%m:separator=&%%\" & call echo 第二次替換:%%m%% & call \"C:\\Program Files\\Internet Explorer\\iexplore.exe\" %%m%%"


運行效果:io

 


緣由分析:
執行m=\"%%m:separator=&%%\"後,m的值變爲了"//www.baidu.com/?a=1&b=2  "
看來問題出在雙引號上,但由於包含特殊字符&,此處必需使用雙引號。
嘗試各類寫法未果,後經培高人指點,將具體的操做寫到bat文件中,在此處調用該bat。


C:\Program Files\WisoftAlert目錄下新建alert.battable

@echo off
set m=%m:alert:=%
set m="%m:separator=&%"
start "" "C:\\Program Files\\Internet Explorer\\iexplore.exe" %m%
exit


修改alert.reg

[HKEY_CLASSES_ROOT\alert\shell\open\command]
@="cmd /c set m=%1 & \"C:\\Program Files\\WisoftAlert\\alert.bat\" %%m%% & exit"


屢次點擊測試連接均成功!(效果圖略)

階段三:方便用戶操做
新建runreg.bat,自動註冊協議

REGEDIT /S alert.reg


經過WinRAR將alert.regalert.batrunreg.bat打包成exe文件

 
 
解壓路徑需與alert.reg中一致 

解壓後自動運行runreg.bat,寫入註冊表信息 

靜默執行

階段四:連接中直接使用&符號
修改alert.reg,將參數%1用雙引號引發來

[HKEY_CLASSES_ROOT\alert\shell\open\command]
@="\"C:\\Program Files\\WisoftAlert\\alert.bat\" \"%1\""


修改alert.bat

@echo off
set m=%1%
set m=%m:alert:=%
start "" "C:\\Program Files\\Internet Explorer\\iexplore.exe" %m%
exit


測試連接:

<a href="alert://www.baidu.com?a=1&b=2" />test

測試成功!

相關文章
相關標籤/搜索