现在类似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"
>
<
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
>
</
HEAD
>
<
BODY
onload
=OnLoad_WelcomePage();>

<SPAN
id
=noPopHtml>

</BODY
>
</
HTML
>