鉴于以下流程:
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(),则会感到不快。
答案 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,模拟窗口,完全控制它。