[JavaScript]用指令碼檢測使用者是否把網站加入信任網站

來源:互聯網
上載者:User

需求:系統要求使用者佈建信任網站,否則會出現一些莫名其妙的故障(這個和系統使用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>
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.