现在类似Google Toolbar的工具条几乎都提供了弹出窗口阻挡的功能,但是在实际WEB开发工作中许多情况下还是需要自动谈出窗口,因此需要检测并提醒用户禁用该功能。
在使用MSN Webmessenger时,发现它可以告诉我使用了弹出窗口阻挡功能,在分析它的代码后,提取出下面的程序,可以直接在自己的项目中使用,经过检验,确实可以检测到IE中google等工具条的阻挡情况,但是GoSurf等多线程浏览器的阻挡弹出页面阻挡却没有检测出来,我将使用多种浏览器做一个测试,将结果加上来。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD><TITLE>弹出窗口检查</TITLE>
<META http-equiv=Content-Type content="text/html; charset=utf-8">
<HTML><HEAD><TITLE>弹出窗口检查</TITLE>
<META http-equiv=Content-Type content="text/html; charset=utf-8">
<SCRIPT language=javascript>
function openwindow(u,n,w,h)
{
var optionstring = "height=" + h + ",width=" + w + ",menubar=no,titlebar=yes,resizable=yes,scrollbars=no,status=no,toolbar=no";
window.open(u,n,optionstring);
}
var spbw = false;
function ShowBlockerWarning()
{
return spbw;
}
function Init()
{
if (true == Detect())
{
spbw = true;
}
}
function Detect()
{
var e = false;
var pw1 = null;
var pw2 = null;
try
{
do
{
var d = new Date();
var wName = "ptest_" + d.getTime();
var testUrl = IsYBI() ? "popupTest.aspx" : "";
pw1 = window.open(testUrl,wName,"width=0,height=0,left=5000,top=5000",true);
if (null == pw1 || true == pw1.closed)
{
e = true;
break;
}
pw2 = window.open(testUrl,wName,"width=0,height=0");
if (null == pw2 || true == pw2.closed)
{
e = true;
break;
}
if (IsYBI())
{
if (pw1 != pw2)
{
e = true;
break;
}
}
pw1.close();
pw2.close();
pw1 = pw2 = null;
}
while(false);
}
catch(ex)
{
e = true;
}
if (null != pw1)
{
try { if (!pw1.closed) pw1.close(); } catch(ex){}
}
if (null != pw2)
{
try { if (!pw2.closed) pw2.close(); } catch(ex){}
}
return e;
}
function IsYBI()
{
var i = false;
try
{
var xObj = new ActiveXObject("YBIOCtrl.CompanionBHO");
if (xObj==null) i = false;
else i = true;
}
catch(ex) { i = false; }
return i;
}
Init();
</SCRIPT>
<SCRIPT language=javascript>
var warningMessage = "检查到使用了弹出窗口阻挡器!Pop-up blocker detected.";
var warningInformation = "请确保浏览器允许本网站打开弹出窗口。";
var g_blockerHtml;
g_blockerHtml = "<div><table border=1 cellspacing=0 cellpadding=0>";
g_blockerHtml += "<tr><td>" + warningMessage + "</td></tr>";
g_blockerHtml += "<tr><td>" + warningInformation + "</td></tr>";
g_blockerHtml += "</table></div>";
</SCRIPT>
<SCRIPT language=javascript>
var messengerWindow = null;
function OnLoad_WelcomePage()
{
if ( ShowBlockerWarning() )
{
var messageObject = document.getElementById("noPopHtml");
if (null != messageObject)
{
messageObject.innerHTML = g_blockerHtml;
}
}
}
</SCRIPT>
function openwindow(u,n,w,h)
{
var optionstring = "height=" + h + ",width=" + w + ",menubar=no,titlebar=yes,resizable=yes,scrollbars=no,status=no,toolbar=no";
window.open(u,n,optionstring);
}
var spbw = false;
function ShowBlockerWarning()
{
return spbw;
}
function Init()
{
if (true == Detect())
{
spbw = true;
}
}
function Detect()
{
var e = false;
var pw1 = null;
var pw2 = null;
try
{
do
{
var d = new Date();
var wName = "ptest_" + d.getTime();
var testUrl = IsYBI() ? "popupTest.aspx" : "";
pw1 = window.open(testUrl,wName,"width=0,height=0,left=5000,top=5000",true);
if (null == pw1 || true == pw1.closed)
{
e = true;
break;
}
pw2 = window.open(testUrl,wName,"width=0,height=0");
if (null == pw2 || true == pw2.closed)
{
e = true;
break;
}
if (IsYBI())
{
if (pw1 != pw2)
{
e = true;
break;
}
}
pw1.close();
pw2.close();
pw1 = pw2 = null;
}
while(false);
}
catch(ex)
{
e = true;
}
if (null != pw1)
{
try { if (!pw1.closed) pw1.close(); } catch(ex){}
}
if (null != pw2)
{
try { if (!pw2.closed) pw2.close(); } catch(ex){}
}
return e;
}
function IsYBI()
{
var i = false;
try
{
var xObj = new ActiveXObject("YBIOCtrl.CompanionBHO");
if (xObj==null) i = false;
else i = true;
}
catch(ex) { i = false; }
return i;
}
Init();
</SCRIPT>
<SCRIPT language=javascript>
var warningMessage = "检查到使用了弹出窗口阻挡器!Pop-up blocker detected.";
var warningInformation = "请确保浏览器允许本网站打开弹出窗口。";
var g_blockerHtml;
g_blockerHtml = "<div><table border=1 cellspacing=0 cellpadding=0>";
g_blockerHtml += "<tr><td>" + warningMessage + "</td></tr>";
g_blockerHtml += "<tr><td>" + warningInformation + "</td></tr>";
g_blockerHtml += "</table></div>";
</SCRIPT>
<SCRIPT language=javascript>
var messengerWindow = null;
function OnLoad_WelcomePage()
{
if ( ShowBlockerWarning() )
{
var messageObject = document.getElementById("noPopHtml");
if (null != messageObject)
{
messageObject.innerHTML = g_blockerHtml;
}
}
}
</SCRIPT>
</HEAD>
<BODY onload=OnLoad_WelcomePage();>
<SPAN id=noPopHtml>
</BODY>
</HTML>