IE has empty document.referrer after a location.replace
I've got a site that does a complex search and has a "loading" page. O开发者_运维问答n the loading page we use:
<body onload="window.location.replace('results_page.php');" >
Or:
<body onload="window.location = 'results_page.php';" >
The only difference between the two option above are that location.replace() ignores the page in the browser's history.
On the results_page I need to read the referrer for tracking purposes:
<script> alert(document.referrer); </script>
This works fine on all browsers except IE, which returns and empty value for document.referrer
.
Anyone know a better way to do a javascript redirect that will give IE a value for the referrer?
p.s. This example has been made much more simple than it would be in production.
Looks like this is just the cost of doing business with IE users. Can't be fixed without a hack. Working on one now. Thanks for listening.
http://webbugtrack.blogspot.com/2008/11/bug-421-ie-fails-to-pass-http-referer.html
I used the workaround to make this function. Works like a charm.
<script type="text/javascript" >
function redirect(url) {
if (/MSIE (\d+\.\d+);/.test(navigator.userAgent)){
var referLink = document.createElement('a');
referLink.href = url;
document.body.appendChild(referLink);
referLink.click();
} else {
location.href = url;
}
}
</script>
INFO: Internet Explorer Does Not Send Referer Header in Unsecured Situations
When linking from one document to another in Internet Explorer 4.0 and later, the Referer header will not be sent when the link is from an HTTPS page to a non-HTTPS page. The Referer header also will not be sent when the link is from a non-HTTP(S) protocol, such as file://, to another page.
Microsoft
Based on Matt answer this code snippet also detects IE11 and opens url in new tab. On Microsoft Edge browser no additional changes are required to pass document.referrer with window.location.replace.
<script type="text/javascript">
function openUrlNewTab(url) {
//use userAgent to detect <IE11 and window obj to detect IE11
if (/MSIE (\d+\.\d+);/.test(navigator.userAgent) ||
(!!window.MSInputMethodContext && !!document.documentMode)) {
var el = document.createElement('a');
el.href = url;
el.target = '_blank';
document.body.appendChild(el);
el.click();
} else {
window.open(url);
}
}
</script>
精彩评论