前言
這幾天有個需求,需要在IE上啟動本地程序,就如下面一樣。
一開始,我還以為IE有提供特殊的接口,類似上圖中的“RunExe”,可以找了大半天覺得不對經(找不到該方法)。
后來想想不對,這種方式是ActiveX控件。
ActiveX控件基本概念
ActiveX控件可以看作是一個極小的服務器應用程序,它不能獨立運行,必須嵌入到某個容器程序中,與該容器一起運行。這個容器包括WEB網頁,應用程序窗體等。
ActiveX控件是基於com標准,使得軟件部件在網絡環境中進行交互的技術集。它與具體的編程語言無關。作為針對Internet應用開發的技術,ActiveX被廣泛應用於WEB服務器以及客戶端的各個方面。同時,ActiveX技術也被用於方便地創建普通的桌面應用程序,此外ActiveX一般具有界面。
PS:使用ActiveX需要設置IE的安全級別,Internet選項-->安全-->自定義級別--> 對沒有標記為安全的ActiveX控件進行初始化和腳本運行—>啟用。
結論
所以就如啟動QQ、迅雷,根本就不是用ActiveX控件,嚴格上講,ActiveX控件已經是實現業務邏輯的可視化界面(類似Chrome的拓展程序),所以這種方式被拋棄,因為我是要啟動本地一個程序,而不是一個“插件”。
自定義協議
就如果迅雷和QQ,可以用類似tencent://message,直接在頁面啟動程序。
做法:
Windows:在注冊表添加一個新的key以及相關的value到HKEY_CLASSES_ROOT中,來使應用程序可以處理特殊的URL協議。
Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\BingoLink] @="URL:BingoLink Protocol" "URL Protocol"="C:\\Program Files (x86)\\BingoSoft\\BingoLink\\BingoLink.exe" [HKEY_CLASSES_ROOT\BingoLink\DefaultIcon] @="C:\\Program Files (x86)\\BingoSoft\\BingoLink\\BingoLink.exe,1" [HKEY_CLASSES_ROOT\BingoLink\shell] @="open" [HKEY_CLASSES_ROOT\BingoLink\shell\open] @="open" [HKEY_CLASSES_ROOT\BingoLink\shell\open\command] @="\"C:\\Program Files (x86)\\BingoSoft\\BingoLink\\BingoLink.exe\" \"%1\""
<!doctype html> <html> <head> <meta charset="utf-8"> <title>test</title> </head> <body > <a href="BingoLink://login?loginticket=11223344">點擊這里啟動程序</a> </body> </html>

附錄
1.js啟動本地程序。
var wsh = new ActiveXObject("WScript.shell"); var path = wsh.RegRead("HKEY_CLASSES_ROOT\\BingoLink\\URL Protocol") + " --sign=11223344"; wsh.exec(path); //用run是不行的
參考文獻
1.http://blog.csdn.net/qq_25867649/article/details/52189412 【ActiveX控件】
2.http://blog.csdn.net/jackychen_king/article/details/7743811 【通過自定義URL協議在Web中啟動本地應用程序】
3.http://cocoa.venj.me/blog/custom-url-scheme-on-mac-and-ios/