Почему почтовые ссылки в Chrome конфликтуют с POST-запросами? - PullRequest
7 голосов
/ 03 мая 2011

Я не совсем уверен, что вопрос правильный, но вот ситуация.У меня есть веб-страница с двумя запросами POST, которые открыты в течение некоторого времени (ответ не должен быть получен сразу), в то время как я могу делать другие вещи на странице.У меня также есть ссылка mailto на странице.По какой-то причине в Chrome, когда я нажимаю эту ссылку, два запроса сразу же возвращают ошибку.Я также заметил, что консоль в Chrome отображает ссылку mailto как событие запроса GET (при нажатии).Что здесь происходит?Даже если Chrome рассматривает ссылки mailto как запросы, почему он должен конфликтовать с любыми другими запросами на странице?

В Firefox ссылка mailto не влияет на запросы, они просто продолжают работать и ждут ответа сервера.Кроме того, сама ссылка не является запросом какого-либо рода.Кстати, mailto открывает окно сообщений Outlook (и эта часть отлично работает в Chrome, только запросы не выполняются).

Также на всякий случай я использую jQuery $ .ajax для инициирования запросов.

Было отмечено, что, возможно, Chrome рассматривает почтовую ссылку как обычную, по крайней мере частично, и поэтому имеет некоторые побочные эффекты.Тогда возникает вопрос, как мне объединить ссылку mailto с запросом на странице?Я не могу заменить ссылку на форму.

Ответы [ 5 ]

7 голосов
/ 02 октября 2012

Я недавно столкнулся с этой проблемой. На самом деле это происходит с mailto: или любым другим URI приложения в Chrome. Решение, которое я использовал, состояло в том, чтобы загрузить URL в iframe:

$('body').append('<iframe id="mailto-launcher"></iframe>');
$('#mailto-launcher').get(0).contentWindow.location.href = 'mailto:?subject=test';

Вы также можете стилизовать этот фрейм так, чтобы он отображался за пределами страницы (используя абсолютное позиционирование и т. Д.). Это запустит почтовый клиент и все еще поддерживает запросы AJAX вашего документа.

1 голос
/ 12 августа 2013

Служба поддержки Google Analytics предлагает перехватывать ссылки, отправлять запросы в GA, ждать 100 мс, а затем обновлять URL.Для завершения запроса отслеживания должно быть достаточно 100 мс.https://support.google.com/analytics/answer/1136920?hl=en

Пример неуклюжий, ниже приведена модифицированная версия, которая автоматически обрабатывает все ссылки (в том числе созданные с помощью javascript / загруженные с помощью AJAX):

<script src="http://code.jquery.com/jquery-1.10.1.min.js"></script>
<script>
  function trackOutboundLink(event){
    var url = event.currentTarget.href;
    try {
      _gaq.push(['_trackEvent', 'Outbound Links' , url]);
    } catch(err){}

    setTimeout(function() {
      document.location.href = url;
    }, 100);

    return false;
  }

  $(document).on('click', 'a[href]', trackOutboundLink);
</script>
0 голосов
/ 06 октября 2013

То же самое, POST для mixpanel были отменены.Наш обходной путь состоял в том, чтобы вызвать ссылку mailto: с использованием setTimeout в 1 секунду, он работает просто отлично.Не красиво, жестко, но в пятницу в 10 часов вечера в офисе все звучало нормально:)

0 голосов
/ 09 августа 2013

Эта проблема не позволила мне отправить событие в Google Analytics при нажатии на ссылку электронной почты.

В качестве обходного пути я изменил цель mailto: ссылки на _blank. Это заставляет браузер открывать пустую вкладку перед открытием Mail.app, но интеграция с GA теперь работает.

0 голосов
/ 03 мая 2011

Не уверен, но возможно, что Chrome воспринимает нажатие на ссылки mailto как переход на новую страницу.

Имеет все побочные эффекты, но не имеет реальных эффектов (например, перезагрузки страницы)..)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...