Beim Schreiben eines Modulladers ist es ein wesentlicher Schritt, den absoluten Pfad der aktuellen Skriptdatei als Basispfad zu ermitteln. Lassen Sie uns dieses Problem gemeinsam besprechen!
1. Implementierungsmethoden der wichtigsten Browser
[a]. Chrome und FF
Ein supereinfacher Satz reicht!
var getCurrAbsPath = function(){ return document.currentScript.src; };
Hier wird das Objekt document.currentScript verwendet, das das aktuell ausgeführte Skriptelement zurückgibt. Anschließend kann der absolute Pfad der Skriptdatei durch Aufrufen des src-Attributs des Skriptelements ermittelt werden.
[b]. IE10+, Safari und Opera9
Verwenden Sie das Stack-Attribut (IE10+), das SourceURL-Attribut (Safari) und das Stacktrace-Attribut (Opera9) des Error-Objekts, um den absoluten Pfad zu extrahieren
var getCurrAbsPath = function(){ var a = {}, stack; try{ a.b(); } catch(e){ stack = e.stack || e.sourceURL || e.stacktrace; } var rExtractUri = /(?:http|https|file):\/\/.*?\/.+?.js/, absPath = rExtractUri.exec(stack); return absPath[0] || ''; };
[C]. IE5.5~9
Durchlaufen Sie die Skript-Tags im Dokument
var getCurrAbsPath = function(){ var scripts = document.scripts; var isLt8 = ('' + document.querySelector).indexOf('[native code]') === -1; for (var i = scripts.length - 1, script; script = scripts[i--];){ if (script.readyState === 'interative'){ return isLt8 ? script.getAttribute('src', 4) : script.src; } } };
2. Einführung in relevantes Wissen
Der readyState des Skripts unter IE5.5~9 gibt den Status des Skriptelements an, das die folgenden Statuswerte hat:nicht initialisiert: nicht initialisiert
Laden: Laden
geladen: Laden abgeschlossen
interaktiv: ausführen
abgeschlossen: Ausführung abgeschlossen
Sie können Zustandsänderungen von Skriptelementen abhören, indem Sie das Ereignis onreadystatechange abonnieren. Aber leider erscheinen die geladenen und abgeschlossenen Zustände in einer unsicheren Reihenfolge und es kann sein, dass nur einer von ihnen erscheint. Daher wird empfohlen, dass Sie beim dynamischen Hinzufügen eines Skriptelements zuerst das src-Attribut festlegen und dann das Skriptelement zum DOM-Baum hinzufügen , sodass in den geladenen und vollständigen Zuständen nur einer von ihnen angezeigt wird (obwohl welcher bei jeder Anforderung angezeigt wird), was einfacher zu überwachen ist.
3. Ein anderer Weg unter IE und FF
Durch das Abonnieren des window.onerror-Ereignisses akzeptiert die Event-Handler-Funktion drei Parameter, nämlich msg, url und num. Die URL hier ist der absolute Pfad des aktuellen Skripts.Das Obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, er wird für das Studium aller hilfreich sein.