8

He estado buscando en Google por un tiempo y parece que no puedo encontrar una respuesta a esta pregunta. Mi problema es el siguiente:¿Por qué no puedo usar URL relativas con IE7?

Para mi jquery, necesito que mis enlaces sean relativos en lugar de absolutos. Mi PHP está configurado para devolver URL relativas y todo funciona bien, hasta que lo pruebo en IE7. Por alguna razón, IE7 sigue cambiando mis URL relativas para abosultar, lo que rompe mi script js. ¿Esto es normal? ¿Hay alguna forma de evitarlo?

Por ejemplo:

IE8, Chrome, Firefox, Safari, etc -

<a href='/page' onclick='click_handler(this);return false;'>clicky</a> 

IE7 -

<a href='http://www.myurl.com/page' onclick='click_handler(this);return false;'>clicky</a> 
+0

Creo que los dos ejemplos anteriores son en realidad URL absolutas. Una ruta relativa sería algo así como ../../page.html o ./folder/page.html – Sandro

+0

umm. . . ¿De Verdad? Sin duda, el primero es relativo ya que es relativo al dominio actual. Si ese enlace estuviera en google.com, apuntaría a http://www.google.com/page. – gomezuk

Respuesta

9

Lo que hago es agarrar el baseUrl a init, como:

var baseUrl = window.location.href.substring(0, window.location.href.lastIndexOf("/") + 1); 

... y luego en mi controlador de URL, tira de la baseUrl:

var url = $(this).attr("href").replace(baseUrl, ""); 

también puede comprobar si el href es "normalizado" usando .support():

$.support.hrefNormalized 

(true devuelve si el navegador hace ninguna modificación cuando se agarra un valor de href, por lo que es actualmente falsa en el IE.)

+0

+1 excelente respuesta. Lo modifiqué para usar 'var baseUrl = window.location.href.split ('/'). Slice (0,3) .join ('/');' - un poco más conciso y no se rompe en las URL como ' http: // www.example.com/foo/bar/whatever'. –

0

Si yo fuera usted, que haría uso de la detección del navegador y añadir una cláusula para quitar la URL a la ruta relativa. No estoy 100% familiarizado con jQuery, pero imagino que podrías hacerlo con una simple división y reconstrucción, o una consulta REGEX.

Ver jQuery analizador URL Plugin: http://plugins.jquery.com/project/url_parser

+1

Buen plan, excepto la parte de detección del navegador. Solo mira la URL, y si comienza con http [s], quita esa parte de la URL. – jvenema

+0

Sí, esta podría ser mi única opción. Esperaba que hubiera una solución sin Javascript. – gomezuk

0

derecha, parece que la mejor manera de hacer esto es despojar el dominio en jQuery. Para cualquier persona que tiene un problema similar, esto es lo que se ve mi controlador de eventos click como:

var href_attr = element.getAttribute('href'); 
if (href_attr.indexOf('http://')>-1) { 
    href_attr = href_attr.substr(location.href.length-1); 
}; 
0

Aquí es una versión modificada de la respuesta de JKS que utiliza dividida en lugar de subcadena. Un poco más elegante IMO:

stripBaseUrl : function(url){ 
    var urlArray = url.split("/"); 
    return urlArray[urlArray.length - 1]; 
} 
Cuestiones relacionadas