8

Ich google seit einer Weile und finde keine Antwort auf diese Frage. Mein Problem ist wie folgt:Warum kann ich keine relativen URLs mit IE7 verwenden?

Für meine jquery, ich brauche meine Links, um relativ sein, anstatt absolut. Mein PHP ist so eingestellt, dass es relative URLs zurückgibt und alles funktioniert einwandfrei, bis ich es in IE7 getestet habe. Aus irgendeinem Grund ändert IE7 meine relativen URLs immer weiter, was mein JS-Skript unterbricht. Ist das normal? Gibt es einen Weg, um es zu umgehen?

Zum Beispiel:

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

Ich denke, dass beide oben genannten Beispiele tatsächlich absolute URLs sind. Ein relativer Pfad wäre etwas wie ../../page.html oder ./folder/page.html – Sandro

+0

umm. . . Ja wirklich? Sicherlich ist die erste relativ, da sie relativ zur aktuellen Domäne ist. Wenn dieser Link auf google.com wäre, würde er auf http://www.google.com/page verweisen. – gomezuk

Antwort

9

Was muss ich tun ist, um die baseUrl bei init greifen, wie:

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

... und dann in meine URL-Handler, Streifen der baseUrl:

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

überprüfen Sie können auch, wenn die href "normalisiert" ist mit .support():

$.support.hrefNormalized 

(liefert true, wenn der Browser keine Änderungen macht, wenn ein href Wert greifen, so falsch ist es zur Zeit im Internet Explorer.)

+0

+1 ausgezeichnete Antwort. Ich habe es so modifiziert, dass 'var baseUrl = window.location.href.split ('/'). Slice (0,3) .join ('/');' - etwas prägnanter ist und nicht auf URLs wie 'bricht http: // www.example.com/foo/bar/was auch immer ". –

0

Wenn ich Sie wäre, würde ich Browser-Erkennung verwenden und ein hinzufügen Klausel, um die URL auf den relativen Pfad zu reduzieren. Ich bin nicht 100% vertraut mit jQuery, aber ich stelle mir vor, Sie könnten es mit einer einfachen Split und Rekonstruktion oder REGEX-Abfrage tun.

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

+1

Guter Plan, außer für den Browser-Erkennungsteil. Schau dir einfach die URL an, und wenn sie mit http [s] beginnt, entferne diesen Teil der URL. – jvenema

+0

Ja, das könnte meine einzige Option sein. Ich hatte gehofft, dass es eine nicht Javascript Lösung gab. – gomezuk

0

Richtig, es scheint der beste Weg, dies zu tun ist, um die Domain aus in jQuery abzustreifen. Für alle, die ein ähnliches Problem hat, ist hier, was Handler meine Click-Ereignis wie folgt aussieht:

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

Hier ist eine modifizierte Version von JKS Antwort, die Spaltung statt String verwendet. Ein wenig eleganter IMO:

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