javascript - pagina - ventana modal jquery
La ubicaciĆ³n de la ventana de JavaScript no establece el referente en el encabezado de la solicitud (5)
El título de tu publicación muestra que deseas cambiar la página actual mediante programación utilizando JavaScript, pero aún se proporciona la referencia HTTP (por lo que entendí, usar una etiqueta <a>
es solo para un caso de prueba).
Debe tener en cuenta los problemas de los navegadores múltiples:
- El encabezado de referencia HTTP (HTTP-Referer) se establece al cambiar
window.location.href
en los siguientes navegadores:- MSIE 9 (pero probablemente cualquier versión por encima de 9)
- Firefox (al menos 3.0, 3.5, 4.0, 5.0, pero muy probablemente todas las versiones)
- Chrome (al menos 9, pero muy probablemente todas las versiones)
- Safari (al menos 5, pero muy probablemente todas las versiones)
- Opera (al menos 11, pero muy probablemente todas las versiones)
- MSIE (al menos 6, 7, 8) : la referencia no se establece al cambiar
window.location.href
(es por esto que algunas pseudo soluciones están basadas enmyLink.click()
) - Firefox (al menos 3.0, 3.5, 4.0) : la función de
click
no existe (es por esto que las pseudo soluciones basadas enmyLink.click()
no funcionan) - Firefox 5 : la función de
click
existe en Firefox 5 pero no cambia la ubicación de la ventana, por lo que no funcionarán todos los métodos que dependen de la existencia del métodomyLink.click()
. Llamar amyLink.onclick()
omyLink.onClick()
un error ("onclick no es una función"), por lo que las soluciones basadas en estas llamadas no funcionarán.
Para administrar estos problemas en varios navegadores, estoy usando el siguiente método:
function navigateToUrl(url) {
var f = document.createElement("FORM");
f.action = url;
var indexQM = url.indexOf("?");
if (indexQM>=0) {
// the URL has parameters => convert them to hidden form inputs
var params = url.substring(indexQM+1).split("&");
for (var i=0; i<params.length; i++) {
var keyValuePair = params[i].split("=");
var input = document.createElement("INPUT");
input.type="hidden";
input.name = keyValuePair[0];
input.value = keyValuePair[1];
f.appendChild(input);
}
}
document.body.appendChild(f);
f.submit();
}
navigateToUrl("http://foo.com/bar");
Esta solución funciona en todos los sabores y versiones del navegador enumerados anteriormente. Tiene la ventaja de ser simple, de múltiples navegadores y fácil de entender. Tenga en cuenta que esto no se ha probado bajo HTTP S.
Entiendo que confiar en el Referer en el encabezado de la solicitud no es correcto. Pero mi pregunta es, ¿por qué IE no configura el Referer en el encabezado de solicitud si uso window.location
? ¿Alguna idea o arreglos?
Esto no establece a Referer en el encabezado de la Solicitud :
function load1() {
window.location = "https://" + serverURL + "/path/folder/page.aspx";
}
<a href="javascript:load1()">Link 1</a>
Mientras esto establece :
<a href="https://hardcode.server.url/path/folder/page.aspx">Link 1</a>
La configuración de window.location
no es lo mismo que seguir un enlace en esa página. Inicia una nueva solicitud de la página, según se cree que el usuario escribió la URL en la barra de direcciones del navegador.
Me las arreglé para localizar una solución:
function goTo(url)
{
var a = document.createElement("a");
if(!a.click) //for IE
{
window.location = url;
return;
}
a.setAttribute("href", url);
a.style.display = "none";
document.body.appendChild(a);
a.click();
}
Crea un enlace en la página y simula un clic. El resultado es un cambio en window.location
y se completa la referencia.
http://ianso.blogspot.com/2006/01/referer-header-not-set-on-http.html
No tengo suficientes puntos para comentar sobre la respuesta de Evan para sugerir una corrección, por lo que todo lo que puedo hacer es publicar la corrección aquí. En resumen, a document.createElement(a)
le faltan las comillas y debería ser document.createElement("a")
. Esto también debería solucionar la preocupación de Kevin sobre FF5.
Toda la función como la escribí:
function goTo(url)
{
var a = document.createElement("a");
if (a.click)
{
// HTML5 browsers and IE support click() on <a>, early FF does not.
a.setAttribute("href", url);
a.style.display = "none";
document.body.appendChild(a);
a.click();
} else {
// Early FF can, however, use this usual method
// where IE cannot with secure links.
window.location = url;
}
}
Esto funciona en nuestro entorno HTTPS con IE7, IE8, FF3, FF7 y Chrome. Así que me imagino que funciona en FF5 también. Sin esta solución, obtenemos 403 errores en IE7 e IE8 cuando intentamos establecer window.location. Respecto a la pregunta de Sha Le sobre por qué IE hace esto, solo puedo suponer que creen que es demasiado inseguro. Tuve un problema similar con window.open en IE que también tuve que solucionar.
Sí, el tuyo también funciona, pero terminó haciendo:
<a href="#" id="linkOne">Link 1</a>
<script type="text/javascript">
document.getElementById("linkOne").href = "https://" + serverURL + "/path/folder/page.aspx";
</script>
¿Es posible desencadenar un evento de clic de un enlace (o cualquier elemento) a través de JavaScript? utiliza una solución createEvent / dispatchEvent o createEventObject / fireEvent.