利用javascript判斷瀏覽器是否已經安裝ActiveX控制項和是否禁止運行ActiveX控制項

來源:互聯網
上載者:User
 

   從微軟給IE打上SP2以後,當IE在開啟一些含有ActiveX控制項的網頁是,不再像以前那樣,彈出提示框,讓使用者選擇是否安裝控制項;現在預設情況下給隱藏起來,普通使用者根本不知道是怎麼回事。公司產品同樣也遇到這樣的問題,唯一的辦法就是將控制項做成一個exe檔案,供使用者下載手動安裝註冊;這樣就需要做一個檢測,檢測要是使用者沒有安裝控制項的話就提示使用者使用者下載安裝,要是安裝了就直接轉到相關頁面。想了很多辦法,最後找到一種比較合理的解決方式。由於我們現在經常使用的ajax技術,它實際上就是一種com組件,通過介面實現發送請求和擷取資料,那麼我們要使用ajax,就必定要建立這樣一個com組件,所以我們可以從這裡入手來解決檢測普通控制項是否被攔截的問題。

   javascript建立ActiveX控制項方式如下:

function DetectActiveX()
 {
    try
    {
       var comActiveX = new ActiveXObject(控制項名稱);   
    }
    catch(e)
    {
       return false;   
    }
    return true;
 }

    只要控制項已經安裝,那麼建立肯定會成功(如果IE設定為禁用ActiveX則會失敗),如果控制項沒有安裝則會失敗。這是一種簡單的檢測方式。那麼控制項名稱怎麼知道呢?大家在寫一個com組件的時候,都有一個對應的CLSID。開啟自己的註冊表(自己系統中已經安裝了控制項),在HKEY_CLASSESS_ROOT中尋找,輸入控制項對應的CLSID,會在該目錄下的一個叫CLSID的目錄中找到對應控制項的註冊資訊,開啟該節點,其中有一項是ProgID,其對應的值就是建立該控制項時所要用的名稱,這樣你就可以方便建立和檢測你自己所設計的控制項了。

       由於IE不允許javascript訪問系統功能,所以我們不能夠對IE的相關設定做一個直接的訪問,那麼根據我們上面的檢測試試,我們可以輕鬆的判定IE是否禁止運行ActiveX控制項,這也是非常有用的一點,因為很多提示我們可能要提示使用者由於什麼什麼原因,而導致不能使用某項ActiveX控制項的功能。那麼我們如何來進行判斷呢,還記得我剛開始提到的ajax這個東西吧,這個東西不僅能帶來更好的使用者互動功能,同時也能夠用在我們檢測瀏覽器是否禁止運行ActiveX 控制項目的上來。因為ajax是由相關的com組件支援,不管是IE,Firefox,Netscape,Opera等其他瀏覽器,都有相應的實現,因為了是瀏覽器的標準。所以我們只要寫一個通用的,支援各種瀏覽器建立ajax 所要用到的xmlhttp對象即可,如果能建立成功,那麼證明IE一切OK,如果不成功則給出提示,其檢測函數相信大家已經再熟悉不過了,只不過我們現在的目的不一樣了,呵呵。

function DisActiveX()
   { 
      //xmlhttp對象
      var kXmlHttp = null;    
      try
      {
         //非微軟IE支援的xmlhttp對象
        if (typeof XMLHttpRequest != "undefined")
        {
           kXmlHttp = new XMLHttpRequest();
           return true;
        }     
      }
      catch(e)
      {  }
      //微軟IE支援的xmlhttp對象
      var aVersionhs = ["MSXML2.XMLHttp.5.0",
          "MSXML2.XMLHttp.4.0",
          "MSXML2.XMLHttp.3.0",
          "MSXML2.XMLHttp",
          "Microsoft.XMLHttp"];
      //IE建立方式
      for (var i = 0; i < aVersionhs.length; i++)
      {      
         try
        {
           kXmlHttp = new ActiveXObject(aVersionhs[i]);
           return true;
        }
       catch(e)
        { }      
      }
    return false;
   }

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.