chrome中有多个标头不起作用-php


more than one header in chrome not working - php

我使用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中不行。我把"身份"扔进去,希望能解开这个谜。

除了检测浏览器并发出不同的命令外,还能做什么?

位置标头应附带30X状态代码(如302),而不是200。

看看这个>http://php.net/manual/en/function.header.php

特别是这两个部分:

第二种特殊情况是"位置:"标题。它不仅将该报头发送回浏览器,但是它也返回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;部分)。

!!!注意过去有一个错误,如果没有先设置header("Status: 200");,Chrome就无法工作,但不确定它是否已经修复。

在这里使用一些AJAX来处理您的问题可能会更好,如果您要使用AJAX使用JQuery,它会更容易

首先,尽管mailto不再是网络上的首选方法,但它过于笨重,并且依赖于正在设置的用户的默认电子邮件客户端,而在大多数情况下,你无法依赖该客户端。

因此,地址有一个链接,样式看起来像你的按钮。

一旦你有了这个,就使用JQuery向执行计数的PHP脚本发送ajax请求,然后如果你希望在收到后通过重定向处理成功(我只包括它,因为我不确定你的重定向实现了什么)。

它的清理速度很快,用户不会注意到任何差异,除了你的网站可能会经历速度的提高:)希望这有助于

标头位置重定向浏览器,因此忽略其他标头。您应该始终将此标头作为最后一个标头发送。此外,在发送重定向后执行任何PHP代码也不是一个好主意。

你可能想这样做:

第一页:

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

关于http://mypage.com:

header("Refresh: 0; url=mailto:email@address.com"); 

chrome的奇怪之处在于:它接受以下头部刷新。

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

我在这个刷新下面放了一个按钮,用于不支持任何类型的头刷新的浏览器。