8

Sono stato su Google per un po 'e non riesco a trovare una risposta a questa domanda. Il mio problema è il seguente:Perché non posso utilizzare URL relativi con IE7?

Per il mio jQuery, ho bisogno che i miei collegamenti siano relativi piuttosto che assoluti. Il mio PHP è impostato per restituire url relativi e tutto sta funzionando bene, fino a quando non lo collaudo in IE7. Per qualche ragione, IE7 continua a cambiare i miei url relativi a abosulute, il che spezza il mio js script. È normale? C'è un modo per aggirarlo?

Ad esempio:

IE8, Chrome, Firefox, Safari, ecc -

<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

Penso che entrambi i tuoi esempi sopra siano in realtà URL assoluti. Un percorso relativo potrebbe essere qualcosa come ../../page.html o ./folder/page.html – Sandro

+0

umm. . . veramente? Sicuramente il primo è relativo in quanto è relativo al dominio attuale. Se il link fosse su google.com, farebbe riferimento a http://www.google.com/page. – gomezuk

risposta

9

Quello che faccio è prendere il baseurl a init, come:

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

... e poi in mio gestore URL, striscia la baseurl:

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

Inoltre è possibile controllare se il href è "normalizzato" utilizzando .support():

$.support.hrefNormalized 

(restituisce true se il browser non fa modifiche quando afferra un valore href, quindi è attualmente falso in IE.)

+0

+1 eccellente risposta. L'ho modificato per usare 'var baseUrl = window.location.href.split ('/'). Slice (0,3) .join ('/');' - leggermente più conciso e non si rompe su urls come ' http: // www.example.com/foo/bar/whatever'. –

0

Se fossi in te, mi piacerebbe usare il rilevamento del browser e aggiungi un clausola per spogliare l'URL fino al relativo percorso. Non conosco al 100% jQuery, ma immagino che potresti farlo con una semplice suddivisione e ricostruzione, o con la query REGEX.

See jQuery URL Parser Plugin: http://plugins.jquery.com/project/url_parser

+1

Un buon piano, ad eccezione della parte di rilevamento del browser. Guarda l'url e se inizia con http [s], elimina quella parte dell'URL. – jvenema

+0

Sì, questa potrebbe essere la mia unica opzione. Speravo ci fosse una soluzione non Javascript però. – gomezuk

0

destro, sembra il modo migliore per farlo è mettere a nudo il dominio in jQuery. Per chiunque che ha un problema simile, qui è quello che il mio gestore di eventi click assomiglia:

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

Ecco una versione modificata della risposta di JKS che utilizza scissione invece di stringa. Un po 'più elegante IMO:

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