Ich habe Probleme damit, das zum Laufen zu bringen. Ich habe zuerst versucht, meine Skript-Tags als Zeichenfolgen festzulegen und sie dann mit jquery replaceWith () nach dem Laden der Seite zum Dokument hinzuzufügen:
var a = '<script type="text/javascript">some script here</script>';
$('#someelement').replaceWith(a);
Aber ich habe String-Literal-Fehler für diese Variable. 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 replaceWith()
senden, wird nur diese Zeichenfolge an den Browser ausgegeben.
Kann mir jemand bitte mitteilen, wie Sie nach dem Laden der Seite, idealerweise über jQuery, dynamisch ein <script>
- Tag in den Browser einfügen würden?
Sie können das Skript in eine separate Datei einfügen und dann $.getScript
um es zu laden und auszuführen.
Beispiel:
$.getScript("test.js", function(){
alert("Running test.js");
});
Versuche Folgendes:
<script type="text/javascript">
// Use any event to append the code
$(document).ready(function()
{
var s = document.createElement("script");
s.type = "text/javascript";
s.src = "http://scriptlocation/das.js";
// Use any selector
$("head").append(s);
});
Hier ist die richtige Vorgehensweise für moderne (2014) JQuery:
$(function () {
$('<script>')
.attr('type', 'text/javascript')
.text('some script here')
.appendTo('head');
})
oder wenn du wirklich ein div ersetzen willst, könntest du folgendes tun:
$(function () {
$('<script>')
.attr('type', 'text/javascript')
.text('some script here')
.replaceAll('#someelement');
});
Ein einfacherer Weg ist:
$('head').append('<script type="text/javascript" src="your.js"></script>');
Sie können dieses Formular auch zum Laden von CSS verwenden.
Diese Antwort ist technisch ähnlich oder entspricht der Antwort von jcoffland. Ich habe gerade eine Abfrage hinzugefügt, um festzustellen, ob ein Skript bereits vorhanden ist oder nicht. Ich brauche das, weil ich in einer Intranet-Website mit einigen Modulen arbeite, von denen einige Skripte freigeben oder eigene mitbringen, aber diese Skripte müssen nicht jedes Mal neu geladen werden. Ich benutze dieses Snippet seit mehr als einem Jahr in der Produktionsumgebung, es funktioniert wie ein Charme. Kommentar an mich selbst: Ja, ich weiß, es wäre richtiger zu fragen, ob eine Funktion existiert ... :-)
if (!$('head > script[src="js/jquery.searchable.min.js"]').length) {
$('head').append($('<script />').attr('src','js/jquery.searchable.min.js'));
}
Beispiel:
var a = '<script type="text/javascript">some script here</script>';
$('#someelement').replaceWith(a);
Es sollte funktionieren. Ich versuchte es; gleiches Ergebnis. Aber als ich das benutzte:
var length = 1;
var html = "";
for (var i = 0; i < length; i++) {
html += '<div id="codeSnippet"></div>';
html += '<script type="text/javascript">';
html += 'your script here';
html += '</script>';
}
$('#someElement').replaceWith(a);
Das hat bei mir funktioniert.
Edit: Ich habe den #someelement
Vergessen (übrigens möchte ich #someElement
Wegen Konventionen verwenden)
Das Wichtigste hier ist das + =, damit der HTML-Code hinzugefügt und nicht ersetzt wird.
Hinterlasse einen Kommentar, wenn es nicht funktioniert hat. Ich würde dir gerne helfen!
Es gibt eine Problemumgehung, die eher wie ein Hack klingt, und ich stimme zu, dass dies nicht die eleganteste Methode ist, aber zu 100% funktioniert:
Sagen Sie, Ihre AJAX Antwort ist so etwas wie
<b>some html</b>
<script>alert("and some javscript")
Beachten Sie, dass ich das schließende Tag absichtlich übersprungen habe. Gehen Sie dann in dem Skript, das das obige lädt, wie folgt vor:
$.ajax({
url: "path/to/return/the-above-js+html.php",
success: function(newhtml){
newhtml += "<";
newhtml += "/script>";
$("head").append(newhtml);
}
});
Frag mich einfach nicht warum :-) Dies ist eines der Dinge, zu denen ich aufgrund verzweifelter, fast zufälliger Versuche gekommen bin und die fehlschlagen.
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 sein.
Hier ist ein viel klarerer Weg - jQuery ist nicht erforderlich - der ein Skript als letztes untergeordnetes Element von <body>
Hinzufügt:
document.body.innerHTML +='<script src="mycdn.js"><\/script>'
Aber wenn Sie hinzufügen möchten und laden Skripte verwenden Rocket Hazmat Methode .