Ich habe Probleme damit. Ich habe zuerst versucht, meine Skript-Tags als Zeichenfolgen festzulegen und sie dann nach dem Laden der Seite mit jquery replaceWith () zum Dokument hinzuzufügen:
var a = '<script type="text/javascript">some script here</script>';
$('#someelement').replaceWith(a);
Aber ich habe String-Literal-Fehler auf dieser Var. Ich habe dann versucht, die Zeichenfolge wie folgt zu codieren:
var a = '&left;script type="text/javascript">some script here<\/script>';
Wenn Sie dies jedoch an die replaceWith()
Ausgabe senden, wird nur diese Zeichenfolge an den Browser ausgegeben.
Kann mir bitte jemand mitteilen, wie Sie <script>
nach dem Laden der Seite dynamisch ein Tag in den Browser einfügen würden, idealerweise über jQuery?
<script>
dem Dokument ein Tag hinzufügen ?eval()
Funktion. Die Verwendung voneval()
fast immer deutet jedoch darauf hin, dass es einen besseren Weg gibt, das zu tun, was Sie versuchen.document.write
und Sie es nach dem Laden der Seite aufrufen, wird die Seite zerstört.<iframe>
Elemente importieren ? Sie können das Festlegen der<iframe>
URL verschieben, bis Sie bereit sind.Antworten:
Sie können das Skript in eine separate Datei
$.getScript
einfügen und dann zum Laden und Ausführen verwenden.Beispiel:
quelle
$.getScript
lädt einfach eine .js-Datei über AJAX und führt sie aus. Das Skript muss sich nicht im DOM befinden, um auf ein Div auf Ihrer Seite zugreifen zu können.$.getScript()
dem Skript muss auf dem gleichen Gebiet sein , oder sowohl die Remote - Domäne und den Browser wird auf Unterstützung benötigenCORS
.$.ajax
Notizen hervorheben : "Skript- und JSONP-Anforderungen unterliegen nicht denselben Einschränkungen für Ursprungsrichtlinien." Quelle . Mit anderen Worten, Sie$.getScript
können .js-Dateien aus anderen Domänen abrufen, nicht nur aus Ihren eigenen .Versuche Folgendes:
http://api.jquery.com/append
quelle
append
zum Hinzufügen eines Skripts. Das Anhängen bewirkt, dass sogar Inline-Skripte sofort ausgewertet werden (genau das, was ich brauchte). DankeHier ist der richtige Weg, dies mit modernem (2014) JQuery zu tun:
oder wenn Sie wirklich ein div ersetzen möchten, können Sie Folgendes tun:
quelle
Ein einfacher Weg ist:
Sie können dieses Formular auch zum Laden von CSS verwenden.
quelle
</script>
in Ihre Quelle einzufügen,/
hat den Trick für mich getan:$('head').append('<script src="your.js"><\/script>');
Diese Antwort ist technisch ähnlich oder entspricht der Antwort von jcoffland. Ich habe gerade eine Abfrage hinzugefügt, um festzustellen, ob bereits ein Skript vorhanden ist oder nicht. Ich brauche das, weil ich auf einer Intranet-Website mit einigen Modulen arbeite, von denen einige Skripte freigeben oder ihre eigenen mitbringen, aber diese Skripte müssen nicht jedes Mal neu geladen werden. Ich verwende dieses Snippet seit mehr als einem Jahr in einer Produktionsumgebung. Es funktioniert wie ein Charme. Kommentar zu mir selbst: Ja, ich weiß, es wäre richtiger zu fragen, ob eine Funktion existiert ... :-)
quelle
Es gibt eine Problemumgehung, die eher nach einem Hack klingt, und ich stimme zu, dass dies nicht die eleganteste Art ist, aber zu 100% funktioniert:
Angenommen, Ihre AJAX-Antwort ist so etwas wie
Beachten Sie, dass ich das schließende Tag absichtlich übersprungen habe. Gehen Sie dann in dem Skript, das das oben genannte lädt, wie folgt vor:
Frag mich einfach nicht warum :-) Dies ist eines der Dinge, zu denen ich als Ergebnis verzweifelter, fast zufälliger Versuche gekommen bin und die fehlgeschlagen sind.
Ich habe keine vollständigen Vorschläge, wie es funktioniert, aber interessanterweise funktioniert es NICHT, wenn Sie das schließende Tag in einer Zeile anhängen.
In Zeiten wie diesen habe ich das Gefühl, erfolgreich durch Null geteilt zu haben.
quelle
<\/script>
wäre aber gültigBeispiel:
Es sollte funktionieren. Ich versuchte es; gleiches Ergebnis. Aber als ich das benutzte:
Das hat bei mir funktioniert.
Edit: Ich habe das vergessen
#someelement
(übrigens möchte ich vielleicht verwenden#someElement
wegen Konventionen verwenden)Das Wichtigste hier ist das + =, damit das HTML hinzugefügt und nicht ersetzt wird.
Hinterlasse einen Kommentar, wenn es nicht funktioniert hat. Ich würde dir gerne helfen!
quelle
Hier ist ein viel klarerer Weg - keine Notwendigkeit für jQuery -, der ein Skript als letztes untergeordnetes Element von Folgendes hinzufügt
<body>
:Wenn Sie jedoch Skripte hinzufügen und laden möchten, verwenden Sie die Methode von Rocket Hazmat .
quelle
Wenn Sie versuchen, dynamisch generiertes JavaScript auszuführen, ist die Verwendung von JavaScript etwas besser
eval
. JavaScript ist jedoch eine so dynamische Sprache, dass Sie das wirklich nicht brauchen sollten.Wenn das Skript statisch ist, ist Rockets
getScript
-Vorschlag der richtige Weg.quelle