Hey alle, ich habe versucht, zusammen, um eine generische Funktion zu werfen, die die absolute URL einer Ausführung JavaScript-Datei auf einer Webseite abruft:Erste URL JavaScript-Datei ausführen (IE6-7 Problem meistens)
Grundsätzlich bekommt man so etwas zu nennen:
getScriptName(function(url) {
console.log(url);
// http://www.example.com/myExternalJsFile.js
});
innerhalb einer externen JavaScript-Datei auf einer Seite und kann dann mit ihm etwas tun (wie finden Sie den <script>
Tag, das es zum Beispiel geladen).
Es funktioniert gut in fast allen Browsern, die ich getestet habe (Firefox, Chrome, Safari, Opera v10 mindestens und IE 8).
Es scheint jedoch in IE 6 und 7 zu scheitern. Die Callback-Funktion wird ausgeführt, aber der abgerufene Name ist die URL zur Haupt-HTML-Seite, nicht die JavaScript-Datei. mit dem Beispiel fort, ruft getScriptName
den Rückruf mit dem Parameter: http://www.example.com/index.html
Also alles, was ich wirklich frage mich, wenn es eine andere Möglichkeit ist die immer die URL der aktuellen JavaScript-Datei (die könnte IE 6 und 7 spezifische hackery) Danke im Voraus!
EDIT: Auch dies wird in jedem Fall nicht funktionieren, so bitte nicht empfehlen:
var scripts = document.getElementsByTagName("script");
return scripts[scripts.length-1].src;
Ich mag es im Fall von dynamisch erstellten Script-Tags arbeiten (möglicherweise nicht zuletzt auf der Seite platziert), aka lazy-loading.
Netter Code und Frage. Obwohl ich keine Antwort darauf weiß, möchte ich Ihnen nur ein paar Optimierungen geben: Sie können jedes 'obj ['prop']' in 'obj ändern.prop 'und als' typeof' gibt immer einen String zurück, man muss nicht auf Identität prüfen ('==='); Das Testen auf Gleichheit ('==') ist gut genug. Diese funktionieren etwas besser als die Dinge in Ihrem Code. –
Danke. Ja, ich weiß, dass ich obj ['prop'] zu obj.prop ersetzen kann, ich hatte es gerade so in Vorbereitung, um die Funktion an den Google Closure Compiler zu senden, der diese Variablennamen verfehlen würde. Ich werde die === zu a == obwohl, danke! – TooTallNate
Ich habe gerade den Zugriff auf 'obj ['prop']' gegen 'obj.prop' getestet, aber im Gegensatz zu dem, was ich dachte, war der Unterschied in Firefox vernachlässigbar, während in Chrome der erstere tatsächlich * schneller * war als der letztere . Ich bin wirklich überrascht darüber, es könnte etwas mit der "Zusammenstellung" von JavaScript durch V8 zu tun haben. –