более одного заголовка в Chrome не работает - php - PullRequest
1 голос
/ 31 мая 2011

Я использую PHP для отслеживания кликов всех ссылок mailto, переписав mailto: в мой скрипт, а затем установив заголовок ссылающейся страницы. Изначально у меня было только:

header("location: mailto:email@address.com");

... но это имеет нежелательный эффект в IE8: он открывает 2 окна электронной почты. Итак, в моей попытке решить эту проблему я сейчас использую:

header("Status: 200");
header("location: http://mypage.com"); 
header("Refresh: 0; url=mailto:email@address.com"); 

Это прекрасно работает в IE, но не в Chrome. Я бросил туда «статус» в надежде разгадать тайну.

Кроме обнаружения браузера и выдачи различных команд, что еще можно сделать?

Ответы [ 5 ]

3 голосов
/ 31 мая 2011

Заголовок местоположения должен сопровождаться кодом состояния 30Х (например, 302), а не 200.

0 голосов
/ 17 февраля 2014

Странная вещь в chrome: он принимает следующее обновление заголовка.

<meta http-equiv="refresh" content="4; url=page.php" />
<button value="go further">

Я помещаю кнопку под этим обновлением для браузеров, которые не поддерживают обновление заголовков любого типа.

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

Расположение заголовка перенаправляет браузер, поэтому остальные заголовки игнорируются.Вы должны отправлять этот заголовок всегда как последний.Также не рекомендуется выполнять любой код PHP после отправки перенаправления.

Возможно, вы захотите сделать это:

На первой странице:

header("Status: 200");
header("location: http://mypage.com"); 
exit();

Наhttp://mypage.com:

header("Refresh: 0; url=mailto:email@address.com"); 
0 голосов
/ 31 мая 2011

вероятно, было бы лучше использовать AJAX для решения вашей проблемы здесь, и если вы собираетесь использовать AJAX, используйте JQuery, это просто проще

во-первых, хотя mailto больше не является предпочтительным методом в Интернете, он слишком неуклюжий и полагается на почтовый клиент по умолчанию настраиваемого пользователя, на который в большинстве случаев нельзя полагаться.

То есть для адреса, на котором есть ссылка, стилизованная под вашу кнопку.

как только вы это сделаете, используйте JQuery для отправки ajax-запроса к PHP-скрипту, который выполняет подсчет, а затем, если вы хотите при получении, обработайте успех с помощью перенаправления (я включаю это только потому, что не уверен, чего достигает ваше перенаправление).

Быстрая очистка, и пользователь не заметит разницы, кроме вашего сайта, вероятно, будет увеличение скорости :) надеюсь, это поможет

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

Проверьте это> http://php.net/manual/en/function.header.php

Особенно эти две части:

Второй особый случай - заголовок «Location:».Он не только отправляет этот заголовок обратно в браузер, но также возвращает код состояния REDIRECT (302) в браузер, если код состояния 201 или 3xx уже был установлен.

<?php
header("Location: http://www.example.com/"); /* Redirect browser */

/* Make sure that code below does not get executed when we redirect. */
exit;
?>

Вы отправляете 200 и 302 одновременно, а также не выполняете правило exit;.

Вы можете поиграть с моими предложениями (особенно с партией exit;).

!!!Примечание !!! В прошлом была ошибка, из-за которой Chrome не работал, если header("Status: 200"); не был установлен первым, но не уверен, что он еще исправлен.

...