开发者

more than one header in chrome not working - php

开发者 https://www.devze.com 2023-03-09 04:24 出处:网络
Im using PHP to track the clicks of all mailto links by rewriting the mailto: to my script and then setting the header of the referring page.

Im using PHP to track the clicks of all mailto links by rewriting the mailto: to my script and then setting the header of the referring page. Initially I just had:

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

...but this has an undesirable effect in IE8: it opens 2 email windows. So, in my attempt to resolve that issue I am now using:

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

Th开发者_高级运维is works fine in IE but not chrome. I threw the "status" in there hoping to solve the mystery.

Other than detecting the browser and issuing different commands, what else could one do?


A location header should be accompanied by a 30X status code (like 302), not 200.


Check this out > http://php.net/manual/en/function.header.php

Especially those two parts:

The second special case is the "Location:" header. Not only does it send this header back to the browser, but it also returns a REDIRECT (302) status code to the browser unless the 201 or a 3xx status code has already been set.

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

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

You send 200 and 302 at same time, and also you didn't follow the exit; rule.

You can play with my suggestions (especially the exit; part).

!!! Note !!! There was a bug in the past that makes the Chrome not to work if header("Status: 200"); wasn't set first, but not sure if it's fixed yet.


it would probably be better to use some AJAX to handle your problem here, and if your going to use AJAX use JQuery its just easier

firstly though mailto is not a preferred method on the web any more its too clunky and relies upon the default email client of the user being set up which in most cases you cannot rely upon.

So to address that have a link that is styled to look like your button.

once you have this use JQuery to send an ajax request to a PHP script that performs the counting and then if you wish upon receipt handle the success with a redirect (I only include that because I am unsure what your redirect achieves).

Its clean quick and the user will not notice a difference apart from your site will probably experience a speed increase :) hope this helps


Header location redirects the browser, so the other headers are ignored. You should send this header always as the last one. Also it's not good idea to execute any PHP code after you send the redirect.

You probably want to do this:

On first page:

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

On the http://mypage.com:

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


The weird thing about chrome: it accepts the following header refresh.

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

I place a button below this refresh for the browsers who does not support any type of header refresh.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号