2011-06-14 5 views
8

que tienen una versión de prueba de un sitio ubicado en un subdominio del sitio normal, como: http://test.x.com en lugar de http://x.com.HTML5 empuje/replaceState y la etiqueta <base> provoca excepción de seguridad

que utilizan la etiqueta <base> para traducir todas las solicitudes de recursos de nuevo al dominio original:

<base href="http://x.com/" /> 

Esta táctica funcionó muy bien hasta que he implementado HTML5 empuje/replaceState apoyo.

Ahora, si yo haga esta declaración en la consola:

history.pushState({}, "", ""); 

... cuando me siento un objeto DOMException en los navegadores basados ​​en WebKit:

code: 18 
constructor: DOMExceptionConstructor 
line: 2 
message: "SECURITY_ERR: DOM Exception 18" 
name: "SECURITY_ERR" 
sourceId: 4839191928 
__proto__: DOMExceptionPrototype 

... y este error en Firefox 4:

Security error" code: "1000 

Si quito la etiqueta <base> y ejecutar el mismo DECLARACIO nt, el nuevo estado es empujado, y no hay excepción.

Algunas preguntas: 1) ¿es este comportamiento un riesgo de seguridad, o es un error? Y 2) ¿hay una solución alternativa para evitar la excepción o una táctica que no sea usar la etiqueta <base> que soslaye el problema por completo?

Gracias por su atención.

Respuesta

12

No es un error, está violando el Same origin policy. "" es una URL relativa que se resolverá en 'http://x.com/' ya que usó la etiqueta <base>. http://x.com es un dominio diferente de donde está alojada la página y es por eso que esto entra en conflicto con la misma política de origen.

El uso de una URL absoluta que apunta a un recurso en http://test.x.com/ en su llamada history.pushState() debe solucionar este problema:

history.pushState({}, "", "http://test.x.com/"); 
+0

Sí! gracias. – JKS

Cuestiones relacionadas