Невозможно вызвать событие выгрузки в Firefox 4 - PullRequest
1 голос
/ 23 апреля 2011

Я выполнил ajax-вызовы по событию unload около года.Обычно это работает в FF и IE, но не до 100%, я не могу сказать, когда это не удалось.Я регистрирую событие, написав в bodytag:
onunload = "...."
Я получил сообщения об ошибках в FF4, так как событие unload также хотело записать в тег div только что выгруженной страницы,Исправлена ​​ошибка, из-за которой подпрограмма ajax ничего не записывала, если идентификатор целевого элемента div - «dummy». Я не специалист по AJAX, но сработал следующий код: http://yorabbit.info/e-dog.info/tmp/ajax_ex.php (ссылка представляет собой текстовую страницу)
(Вы вызываете ajaxfunction2 со следующими аргументами: имя файла, queryString для PHP, строка для отображения в целевом div во время обновления, имя целевого div)

Я не получаю никаких сообщений об ошибках в ошибке FFконсоль и IE9 работает. Есть ли способ заставить его работать в FF тоже ?? Я только начал пробовать FF4, но у меня сложилось впечатление, что он работает хуже, чем в FF3.

Спасибо.

(Я нахожусь в поездке, и у меня нет возможности ответить сразу, но я действительно ценю предложения и отвечу в надлежащее время)

РЕДАКТИРОВАТЬ: Мне было лучше добавить это: AJAX-вызов, который я выполняю при выгрузке, отправляет только некоторые данные (как долго пользователь оставался на странице) на сервер PHP-MySQL

Ответы [ 2 ]

1 голос
/ 23 апреля 2011

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

Решение:
Найти рабочий образец здесь: http://jsfiddle.net/ezmilhouse/4PMcc/1/

Предполагая, что ваши внутренние ссылки настроены относительно, а внешние ссылки, поэтому, начинаются с 'http':

<a href="http://google.com">Leave ...</a>
<a href="/home.html">Stay ...</a>

Вы можете перехватить теги 'a' с помощью событий jQuery и попросить пользователя подтвердить выход (в случае внешних ссылок). В «нормальном» случае вы запускаете ajax-вызов «onleave» (async = true) и перенаправляете пользователя на внешнюю ссылку:

$('a').live('click', function(event){

    // cache link
    var link = $(this).attr('href');

    // check if external link (assuming that internal links are relative)
    if (link.substr(0,4) === "http") {

        // prevent default a tag event
        event.preventDefault();

        // popup confirm message
        var reply = confirm('Do you really want to leave?');
        if (reply) {

            var url = 'http:mydomain.com/ajax.php';
            var data = {'foo': 'bar', 'fee':'bo'};

            // kick off your 'onleave' ajax call
            // forced to be synchronous
            $.ajax({ 
                type: "POST",
                async: false,
                url: url,
                data: data,
                success: function( data ) { 

                   // ok case: leave page, cached link
                   window.location.href = link;

                }
            });

        }

        return false;

    }

});
1 голос
/ 23 апреля 2011

Я не знаю, что здесь происходит, но Firefox 4 внес заметные изменения в то, как работает выгрузка: например, если вы сделаете alert () во время события щелчка по ссылке, он больше не замораживает страницу, нозагрузить новое местоположение в любом случае.Возможно, это что-то похожее.

Однако вы никогда не гарантируете завершения вызова Ajax, если он не синхронизирован ни в одном браузере В любом случае - запрос может возвращаться или не возвращаться сответ, пока страница не будет закрыта.Будет ли это работать случайно, и скорость сети пользователя.

Попробуйте сначала использовать синхронный запрос, как описано здесь: Как работает синхронный AJAX-запрос jQuery?

это обычно гарантирует, что запрос вернется.Тем не менее, используйте его очень экономно - блокировка при выгрузке страницы может очень раздражать пользователя и даже заморозить браузер.

...