[JavaScript]用脚本检测用户是否把网站加入信任站点
需求:系统要求用户设置信任站点,否则会出现一些莫名其妙的故障(这个和系统使用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