我使用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">
我在这个刷新下面放了一个按钮,用于不支持任何类型的头刷新的浏览器。