JS: Как отследить клик по ссылкам, не потеряв кнопку назад - PullRequest
0 голосов
/ 07 сентября 2011

У меня есть виджет js, который встроен в случайные сайты.

Когда пользователь щелкает ссылку, я хочу сообщить об этом на свой сервер.

Чтобы вызвать мой сервер, я создаю тегдинамически с src, содержащим параметры, сообщаемые серверу.

Если я сделаю это для события onclick и верну true из onclick, сервер, вероятно, не получит вызов, потому что браузер изменяет страницу (это правильно?).

Если я делаю это при onclick и возвращаю false, а затем использую перенаправление после возврата вызова на сервер, я теряю функциональность кнопки возврата, поскольку браузеры, такие как IE, не поддерживают кнопку возврата после перенаправления.

Есть идеи, как сделать это надежным способом?

1 Ответ

4 голосов
/ 07 сентября 2011

Нет проблем. Если вы добавите обработчик onclick к элементам <a>, который отправляет AJAX POST на сервер (регистрирует щелчок), он поступит на сервер, страница все равно перейдет к нажатой ссылке, и кнопка «Назад» будет работать как и ожидалось.

Пример в jQuery:

$('a').live('click', function () {
     $.post('/registerclick/', { data: $(this).attr('src') }, function () {});
});

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

  1. Обработчик событий отключается, и на сервер отправляется запрос
  2. По умолчанию поведение браузера перенаправляется на страницу в атрибуте href
  3. Сервер получает запрос, даже если пользователь находится на совершенно другой странице

Браузер не знает о 3-м шаге; но это не имеет значения для сервера.

...