麻烦搞清楚为什么我的弹出遭到封锁
问题描述:
我准备这样的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();
});
});
答
浏览器防止了JS代码自动打开弹出窗口。这可以防止页面自动打开数百个窗口。所以,弹出式开放受到某些用户交互(点击)直接触发的函数调用的限制。 如果您使用动画,则回调将从属于“自动”类别的某种计时器中调用。
+0
这看起来像是块的原因。有没有办法以“同步”的方式调用jquery的fadeOut,以便它不会使用定时器? –
+0
不是我所知道的。由于这种行为是依赖于浏览器的,我不认为可以有一种解决方法可以在任何地方工作,但也许有人更有见识将提供解决方案:) – Yann
你在哪里托管jQuery,在Google API上?如果执行重定向的JavaScript与不同的域链接到页面所在的域,这可能是导致自动阻止的原因。 –
已在Chrome上转载。 –
在我的开发环境中,我的jquery托管在我的域(或本地)和jsfiddle上,我不太确定。 –