2009-12-11 7 views
16

Tengo un sitio que realiza una búsqueda compleja y tiene una página de "carga". En la página de carga utilizamos:IE tiene document.referrer vacío después de una ubicación.replace

<body onload="window.location.replace('results_page.php');" >

O:

<body onload="window.location = 'results_page.php';" >

La única diferencia entre las dos opciones anteriores son que location.replace() hace caso omiso de la página en la historia del navegador.

Por results_page Necesito leer la de referencia para los propósitos de seguimiento:

<script> alert(document.referrer); </script>

Esto funciona bien en todos los navegadores excepto IE, que devuelve y el valor vacío para document.referrer.

¿Alguien sabe una mejor manera de hacer una redirección de JavaScript que le dará a IE un valor para la referencia?

p.s. Este ejemplo se ha hecho mucho más simple de lo que sería en producción.

+0

¿Qué ocurre en IE cuando configura la URL en window.location de esta – leepowers

+0

Pregunta actualizada. – mattweg

Respuesta

24

Parece que esto es solo el costo de hacer negocios con los usuarios de IE. No se puede arreglar sin un truco. Trabajando en uno ahora. Gracias por su atención.

http://webbugtrack.blogspot.com/2008/11/bug-421-ie-fails-to-pass-http-referer.html

que utilizan la solución para hacer esta función. Funciona de maravilla.

<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> 
+0

Wow matt muchas gracias, ¡he estado buscando por todas partes una solución para esto! IE9 maneja una ubicación normal. Muy bien, así que con jQuery lo hice simplemente 'if ($ .browser.msie && $ .browser.version.substr (0, 1) <= 8)' ¡Usted gobierna! –

3

INFORMACIÓN: Internet Explorer no envía Referer cabecera en situaciones sin garantía

Al vincular desde un documento a otro en Internet Explorer 4.0 y versiones posteriores, la cabecera Referer no se enviará cuando el enlace es desde una página HTTPS a una página que no sea HTTPS. El encabezado Referer tampoco se enviará cuando el enlace provenga de un protocolo que no sea HTTP (S), como file: //, a otra página.

Microsoft

0

Sobre la base de Matt responder a este fragmento de código IE11 también detecta y abre la URL en una nueva pestaña. En el navegador Microsoft Edge no se requieren cambios adicionales para pasar document.referrer con 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> 
Cuestiones relacionadas