在AJAX响应处理程序中关闭Firefox 2中的弹出窗口

时间:2009-05-22 22:20:30

标签: javascript ajax firefox

鉴于以下流程:

1)用户点击链接,打开一个弹出窗口。 2)用户做了一些事情,点击按钮保存更改。 3)使用AJAX,一些数据被POST。 4)在AJAX响应处理程序中,弹出窗口关闭,主窗口刷新。

FireFox 2中存在一个问题,即在响应处理程序中关闭弹出窗口失败(直到在窗口上执行某些用户活动,例如鼠标移动)。

Sample code (popup window only):

function ajax_cb()
{
    window.close();
}

// Send a POST request, ajax_cb will be called when readystate == 4.
function test_ajax_close()
{
    Request.sendPOST("file:///test.html", "", ajax_cb);
}

在上面的示例中,窗口最终会关闭,但首先需要用户交互。根据这个link

  

Firefox如果仍然打开套接字执行异步AJAX请求并尝试执行window.close(),则会感到不快。

3 个答案:

答案 0 :(得分:1)

在短暂的超时时间内完成你的收盘..

setTimeout(window.close, 100);

套接字应该有足够的时间完成关闭,弹出窗口要自动关闭。

答案 1 :(得分:0)

我想出的一个解决方案是从外部轮询一些变量,并在窗口发生变化时关闭窗口。我正在寻找更好的解决方案,但示例代码是:

var response_received = 0;

function ajax_cb()
{
    response_received = 1;
}

function monitor_response()
{
    if (response_received)
    {
        self.close();
        return;
    }

    setTimeout("monitor_response()", 100);
}

function test_ajax_close()
{
    Request.sendPOST("file:///test.html", "", ajax_cb);
    monitor_response();
}

答案 2 :(得分:0)

我不会为此使用常规窗口。我会在div中使用iframe,模拟窗口,完全控制它。