麻烦搞清楚为什么我的弹出遭到封锁

问题描述:

我准备这样的jsfiddle:http://jsfiddle.net/x9D4c/9/麻烦搞清楚为什么我的弹出遭到封锁

基本上,一个淡出回调按钮使我弹出来将挡,另一个没有淡出回调没有。我应该做什么/可以做些什么不同?

感谢您的帮助!

下面的代码可用jsfiddle。

HTML:

<a href="#" id="anchor1">CauseBlock</a> - <a href="#" id="anchor2">Not Cause Block</a> 

<div id="greenDiv" style="background-color: green;">green div</div> 

JS:

// ################################################ 

function causeBlock() { 
    causeBlockInsideFunction(function() { 
     window.open("http://www.google.com/"); 
    }); 
} 

function causeBlockInsideFunction(callback) { 
    $("#greenDiv").fadeOut(function() { 
     callback(); 
    }); 
} 

// ################################################ 

function notCauseBlock() { 
    notCauseBlockInsideFunction(function() { 
     window.open("http://www.google.com/"); 
    });  
} 

function notCauseBlockInsideFunction(callback) { 
    // [...] 
    callback(); 
} 

// ################################################ 

$(document).ready(function() { 
    $("#anchor1").click(function(e) { 
     causeBlock(); 
    }); 
    $("#anchor2").click(function(e) { 
     notCauseBlock(); 
    }); 
}); 
+0

你在哪里托管jQuery,在Google API上?如果执行重定向的JavaScript与不同的域链接到页面所在的域,这可能是导致自动阻止的原因。 –

+0

已在Chrome上转载。 –

+0

在我的开发环境中,我的jquery托管在我的域(或本地)和jsfiddle上,我不太确定。 –

浏览器防止了JS代码自动打开弹出窗口。这可以防止页面自动打开数百个窗口。所以,弹出式开放受到某些用户交互(点击)直接触发的函数调用的限制。 如果您使用动画,则回调将从属于“自动”类别的某种计时器中调用。

+0

这看起来像是块的原因。有没有办法以“同步”的方式调用jquery的fadeOut,以便它不会使用定时器? –

+0

不是我所知道的。由于这种行为是依赖于浏览器的,我不认为可以有一种解决方法可以在任何地方工作,但也许有人更有见识将提供解决方案:) – Yann