以下代码显示两个按钮:AJAX弹出窗口和直接弹出窗口。他们应该在新窗口中打开相同的页面。在onclick事件中直接调用window.open()。 AJAX popup执行AJAX调用,然后在stateChanged()函数中以同样的方式调用window.open()。AJAX弹出窗口在IE中被阻止,但不在FF中
它们都在FF中工作,但AJAX弹出窗口不在IE中,它显示恼人的弹出警告。
我其实觉得我明白发生了什么事。弹出式窗口拦截器通常允许每次点击一个弹出窗口。在这种情况下,由于AJAX调用,点击和弹出窗口之间的关系会丢失。但在我的情况下,打开的URL是由服务器端组件通过AJAX响应提供的。所以我不能摆脱AJAX电话。我也不能强制用户使用FF或在IE中更改其弹出窗口拦截器设置。
欢迎任何想法或解决方法。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title> popup test </title>
<script type="text/javascript">
var xmlhttp;
function loadXMLDoc(url)
{
if (window.XMLHttpRequest)
{
// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp = new XMLHttpRequest();
}
else if (window.ActiveXObject)
{
// code for IE6, IE5
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
else
{
alert ("Your browser does not support XMLHTTP!");
return;
}
xmlhttp.onreadystatechange=stateChanged;
xmlhttp.open("GET",url,true);
xmlhttp.send(null);
}
function stateChanged()
{
if (xmlhttp.readyState==4)
{
if (xmlhttp.status==200)
{
window.open('popup.html', '_blank');
}
else
{
alert("Problem retrieving XML data:" + xmlhttp.statusText);
}
}
}
</script>
</head>
<body>
<button type="button" onclick="loadXMLDoc('popup.html')">AJAX popup</button>
<button type="button" onclick="window.open('popup.html', '_blank');">Direct popup</button>
</body>
</html>
这是一个问题,我很也在挣扎。 http://stackoverflow.com/questions/1509306/javascript-window-open-causes-page-close-when-opened-in-ie – Myra 2009-10-06 13:35:10