• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

奋斗中...

曾经的程序员。ASP.NET/C#, JavaScript, PL/SQL, T-SQL; 工具: VS2003/2005, Oracle, SQLServer; 偶尔写点CSS, 批处理.
头脑中经常有新想法, 可惜没有去实现.
Never give up.
Never get into a fight with a pig. Both of you will get dirty. But the pig actually enjoys it.
  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

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

需求:系统要求用户设置信任站点,否则会出现一些莫名其妙的故障(这个和系统使用ActiveX控件有关,也和运行的网络环境的域策略有关) 实现原理: 信任站点的安全级别较低,默认可以使用未标记为安全的ActiveX(包括客户端OCX应用), 你的网站一定是使用了一个不安全的activeX,所以只能在信任站点使用。所以,你只需用JAVASCRIPT检测一下页面的activeX是否被加载和运行,如果正常,即表明加入信任站点,否则,就不是,给用户弹出提示即可。 你也可以通过try catch来捕捉脚本的错误,如果能捕捉到错误,即表明用户未把此站点加入信任站点。

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

posted on 2011-02-25 10:47  jes  阅读(4582)  评论(4)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3