Javascript 传递函数作为参数和弹出窗口拦截器
我得到了树函数:Javascript 传递函数作为参数和弹出窗口拦截器,javascript,Javascript,我得到了树函数: var a = function (f) { // some code window.open("") f(); }; var b = function (f) { // some code f(); } var c = function() { } 我使用带有匿名函数的链调用函数: a(function () { b(function () { c(); }); }); 如果我直接调用a函数,弹出窗口
var a = function (f)
{
// some code
window.open("")
f();
};
var b = function (f)
{
// some code
f();
}
var c = function()
{
}
我使用带有匿名函数的链调用函数:
a(function () {
b(function () {
c();
});
});
如果我直接调用a函数,弹出窗口阻止程序不会阻止我的弹出窗口,因为window.open是由用户单击触发的。但是使用这个链,弹出窗口拦截器会阻止我的弹出窗口
我怎样才能避免呢
ps:这是facebook弹出窗口,我没有尝试做我不应该做的事情。不同的浏览器表现不同。我认为Firefox是最严格的,只允许在与onclick相同的事件循环中直接生成弹出窗口。在Chrome中,您可以在这两者之间进行异步调用,它仍然可以工作。-至少这是我记忆中所记得的 问题是,你几乎无法控制它。是否允许弹出窗口取决于浏览器。您可以为每个浏览器开发一些启发式方法,但这并不理想 尝试找到一个调用
窗口的解决方案。在最有可能工作的相同偶数循环中打开(如果不工作,可以安全地假设没有工作)。a()
可能是异步的吗?通过闭包,您可以传递引用var my_window=window.open
提供任何后续函数,以防以后需要向DOM添加内容
例如:
var a = function (f) {
var my_window = window.open("");
f(my_window);
};
var b = function (f) {
f();
};
var c = function() {};
a(function (my_window) {
my_window.innerHTML = "hello";
b(function () {
c();
});
});
每个then=\中都有一个ajax调用。然后立即打开窗口(如中所示,而不是在ajax调用之后),并像我的示例中那样传递引用。问题是:在打开弹出窗口之前,我需要在服务器端检查用户是否有facebook提供商。但我认为你的例子会解决这个问题。谢谢,我明白了。。嗯,我想你总是可以显示一个错误。。或者在呈现生成事件的按钮之前进行检查。流程是:用户单击菜单项(邀请朋友),如果没有facebook提供商,则我打开弹出窗口,以便用户可以登录facebook。登录完成后,将调用关联帐户的方法,然后调用填充好友的方法。我必须更改它,如果用户没有facebook提供商,我将显示一个按钮,以便他可以单击该按钮并打开弹出窗口。谢谢你,你提供的信息很重要。