Закрытие всплывающего окна в Firefox 2 в обработчике ответов AJAX - PullRequest
0 голосов
/ 23 мая 2009

Учитывая следующий поток:

1) Пользователь нажимает на ссылку, открывает всплывающее окно. 2) Пользователь делает некоторые вещи, нажимает на кнопку, чтобы сохранить изменения. 3) Используя AJAX, некоторые данные отправляются. 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);
}

В приведенном выше примере окно в конечном итоге закроется, но сначала требуется взаимодействие с пользователем. По этой ссылке :

Firefox становится несчастным, если он все еще имеет открытый сокет, выполняющий асинхронный AJAX-запрос, и вы пытаетесь сделать window.close ().

Ответы [ 3 ]

1 голос
/ 23 мая 2009

просто закрой своё короткое время ..

setTimeout(window.close, 100);

Должно быть достаточно времени, чтобы сокет завершил закрытие, а poopup закрылся сам.

0 голосов
/ 23 мая 2009

Я бы не использовал обычное окно для этого. Я бы использовал Iframe внутри div, имитируя окно и полностью контролируя его.

0 голосов
/ 23 мая 2009

Одно из решений, которое я придумал, это опросить некоторую переменную извне и закрыть окно при ее изменении. Я ищу лучшее решение, но пример кода:

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();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...