[JavaScript]用脚本检测用户是否把网站加入信任站点

时间:2022-11-25 14:29:36

需求:系统要求用户设置信任站点,否则会出现一些莫名其妙的故障(这个和系统使用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>