需求:系統要求使用者佈建信任網站,否則會出現一些莫名其妙的故障(這個和系統使用ActiveX控制項有關,也和啟動並執行網路環境的域策略有關)
以下整理自[1][2]:
實現原理:
信任網站的安全層級較低,預設可以使用未標記為安全的ActiveX(包括用戶端OCX應用), 你的網站一定是使用了一個不安全的activeX,所以只能在信任網站使用。所以,你只需用JAVASCRIPT檢測一下頁面的activeX是否被載入和運行,如果正常,即表明加入信任網站,否則,就不是,給使用者彈出提示即可。
你也可以通過try catch來捕捉指令碼的錯誤,如果能捕捉到錯誤,即表明使用者未把此網站加入信任網站。
或者在用戶端調用WScript.Shell檢查註冊表,查看是否加為信任網站,可惜這種辦法往往不行,因為WScript.Shell組件一般都會被瀏覽器所禁止的。
-------------------------------
如果是第一次運行指令碼的話IE會有一個自己的提示:“在此頁面上的 ActiveX 控制項和本頁上的其他部分的互動可能不安全。你想允許這種互動嗎?”然後才能走進catch塊,執行我自己的代碼。我不想要IE的提示,有可以解決的辦法嗎?
解決方案很簡單,是先使用WINDOWS系統內建的不安全的ACTIVEX來進行測試,因為系統內建的AXTIVEX不需要安裝,所以不會出現你所說的提示。如使用FSO對象來進行測試,測試通過後,再使用你自己的ACTIVEX。
-------------------------------
例子代碼如下:
<script type="text/javascript">
function LoadActiveX() {
try {
var fso = new ActiveXObject("Scripting.FileSystemObject");
} catch(e) {
alert('未將本網站添加到信任網站!');
return;
}
//在這裡寫載入你自己ACTIVEX的代碼'未將本網站添加到信任網站!'
}
LoadActiveX();
</script>
實現代碼:
<script type="text/javascript">
function _exec(command) {
window.oldOnError = window.onerror;
window._command = command;
window.onerror = function(err) {
if(err.indexOf('utomation') != -1) {
alert('未將本網站添加到信任網站!');
//window.location.href = "提示頁面.htm";//轉到提示頁面
//return true;
} //else {
//window.location.href = "網站首頁.htm";//轉到網站首頁
//}
};
var wsh = new ActiveXObject('WScript.Shell');
/*
if(wsh) {
if(command)
wsh.Run(command);
}
*/
window.onerror = window.oldOnError;
}
_exec( "mspaint.exe ")
</script>
附錄WScript指令碼設定信任網站:
<SCRIPT LANGUAGE= "JavaScript ">
<!--
var WshShell=new ActiveXObject( "WScript.Shell ");
WshShell.RegWrite( "HKCU\\Software\\Microsoft\\Windows\\CurrentVe
rsion\\Internet Settings\\ZoneMap\\Domains\\21hb.com ", " ");
WshShell.RegWrite( "HKCU\\Software\\Microsoft\\Windows\\CurrentVe
rsion\\Internet Settings\\ZoneMap\\Domains\\21hb.com\\www ", " ");
WshShell.RegWrite( "HKCU\\Software\\Microsoft\\Windows\\CurrentVe
rsion\\Internet
Settings\\ZoneMap\\Domains\\21hb.com\\www\\http ", "2 ", "REG_DWORD "
);
alert( "寫入成功 ");
//-->
</SCRIPT>
參考文檔:
http://topic.csdn.net/t/20050117/16/3732394.html
http://zhidao.baidu.com/question/72484414
-------------------------------
如果是第一次運行指令碼的話IE會有一個自己的提示:“在此頁面上的 ActiveX 控制項和本頁上的其他部分的互動可能不安全。你想允許這種互動嗎?”然後才能走進catch塊,執行我自己的代碼。我不想要IE的提示,有可以解決的辦法嗎?
解決方案很簡單,是先使用WINDOWS系統內建的不安全的ACTIVEX來進行測試,因為系統內建的AXTIVEX不需要安裝,所以不會出現你所說的提示。如使用FSO對象來進行測試,測試通過後,再使用你自己的ACTIVEX。
例子代碼如下:
<script>
function LoadActiveX()
{
try
{
var fso = new ActiveXObject("Scripting.FileSystemObject");
}
catch(e)
{
alert("未加入可信網站。");
return;
}
//在這裡寫載入你自己ACTIVEX的代碼
}
LoadActiveX();
</script>