IE弹出窗口阻止程序阻止了Javascript window.open

时间:2009-05-20 16:29:57

标签: javascript popup

任何人都可以提供帮助,我有一个被阻止的弹出窗口。这是一个弹出窗口,因为有人点击了我网站上的打印图片。

我认为当弹出窗口来自onclick时,我不应该阻止这些?

有人可以帮忙吗?如果启用弹出窗口阻止程序,则child1变量始终返回为NULL

也许问题是onclick事件然后将控制传递给一个新函数,该函数加载一个html文件并执行child.document.write

这是我的简单代码..

var width = 800;
var height = 600;
var left = parseInt((screen.availWidth / 2) - (width / 2));
var top = parseInt((screen.availHeight / 2) - (height / 2));
var windowFeatures = "width=" + width + ",height=" + height 
   + ",menubar=yes,toolbar=yes,scrollbars=yes,resizable=yes,left=" 
   + left + ",top=" + top + "screenX=" + left + ",screenY=" + top;      

child1 = window.open("about:blank", "subWind", windowFeatures);

6 个答案:

答案 0 :(得分:13)

问题是如果您导航到当前主机中的某个位置,open将仅返回对窗口的引用。您正在导航到about:blank,这不在您的主机中。

尝试将blank.htm文件添加到您的网站并将其打开。我仍然不确定document.write是否会被允许文档不会被打开进行编写,你可以操作现有空白文档的DOM。

答案 1 :(得分:4)

当设置为Medium过滤级别时,Internet Explorer弹出窗口阻止程序将不会阻止JavaScript打开的窗口(如果它们是由用户操作启动的)。以下在IE 6,7和8中工作正常:

<script type="text/javascript">
function openWin() {
    var width = 800;
    var height = 600;
    var left = Math.floor((screen.availWidth - width) / 2);
    var top = Math.floor((screen.availHeight - height) / 2);
    var windowFeatures = "width=" + width + ",height=" + height +
            ",menubar=yes,toolbar=yes,scrollbars=yes,resizable=yes," +
            "left=" + left + ",top=" + top +
            "screenX=" + left + ",screenY=" + top;
    child1 = window.open("about:blank", "subWind", windowFeatures);
    writeTo(child1);
}
function writeTo(w) {
    w.document.write('Test');
}
</script>
<a href="#" onclick="openWin();return false;">Test</a>

请注意,在新打开的窗口中使用document.write在某些Web浏览器中不起作用。另请注意,这可能会触发其他浏览器中的弹出窗口阻止程序,即使它的工作原理如Internet Explorer中所示。

我已经看到在某些情况下,从onclick事件调用JavaScript会导致弹出窗口阻止程序触发。它似乎与 far window.open()来自onclick事件的方式有关。在调用window.open()之前调用函数的函数级别太多。如果没有看到您的确切实施,我无法告诉您这是否是您遇到的问题。

答案 2 :(得分:3)

它阻止它,因为它不是具有target =“_ blank”的锚。你是以编程方式创建弹出窗口。

在您提供的代码示例之后执行此操作。

if (!child1) {
      alert('You have a popup blocker enabled. Please allow popups for www.yourSite.com');
}

答案 3 :(得分:1)

请尝试代码

var newWin = window.open(...);
if (newWin && newWin.top) {
    // popup has opened
} else {
    // popup has been blocked
}

答案 4 :(得分:0)

我建议您使用target =“_ blank”而不是window.open()创建一个虚拟[form]。

我希望它有效。

问候。

PD:我认为将您的网站添加到“可信站点”不是一种选择,对吗?

答案 5 :(得分:0)

我有一个想法,即10/11:

let win = window.open();
setTimeout(function(){
    win.customParam = 'xxxx';
});

在win中,你可以在窗口加载后使用定时器或循环获得customParam: