Wie können Sie JavaScript oder CSS laden, ohne sie auszuführen?

8

Ich bin mir bewusst, dass dynamisches script / css geladen wird, indem man <style> oder <link> tags zum Kopf oder Körper der Seite hinzufügt, aber dann wird es nach dem Download vom Browser ausgeführt. Ich habe über andere Möglichkeiten nachgedacht, aber Javascript / CSS-Code nicht ausführen. Zuerst kam mir XMLHttpRequest in den Sinn:

%Vor%

Aber in diesem Fall sind wir wegen der gleichen Ursprungs-Richtlinie mit Skripten derselben Domäne eingeschränkt (obwohl wir versuchen können, sie mit CORS )

Ein anderer Ansatz, über den ich nachgedacht habe, ist, der Seite iframe dynamisch hinzuzufügen und dann script tag zu iframe hinzuzufügen, damit das Skript nach dem Herunterladen ausgeführt wird, aber im Kontext eines anderen geschieht Seite - iframe .

Gibt es andere Möglichkeiten, das Skript herunterzuladen und nicht auszuführen?

UPDATE:

Einer der Gründe, warum es nützlich wäre, javascript / css herunterzuladen, aber nicht auszuführen, besteht darin, Bibliotheken von Drittanbietern vorzuladen, diese aber nur bei Bedarf zu verwenden.

    
Pavel Podlipensky 12.01.2012, 22:15
quelle

4 Antworten

1

Sie können auch iframe verwenden und die script / css-URL als src des Frames verwenden (daher wird sie überhaupt nicht ausgewertet / angewendet), obwohl Sie in diesem Fall sicher sein möchten dass das JavaScript / CSS mit Content-Type text/plain geliefert wurde, um unglückliche Dinge zu vermeiden, die mit < characters und so geschehen. Obwohl Sie bei diesem Ansatz auch in einem vernünftigen Browser auf SOP-Probleme stoßen sollten, wenn iframe src von einem anderen Ursprung stammt.

Abgesehen davon denke ich, dass Sie es weitgehend mit den Optionen, die Sie aufführen, abgedeckt haben.

    
T.J. Crowder 12.01.2012, 22:20
quelle
4

Habe gerade eine weitere Option gefunden, ascript / css asynchron zu laden (ohne SOP zu widersprechen) - benutze <object> tag:

%Vor%

Diesen Ansatz hier gefunden. Deshalb teile ich meine Ergebnisse nur mit Ihnen, hoffe, dass es nützlich sein wird.

    
Pavel Podlipensky 13.01.2012 05:57
quelle
0

Wenn das Skript simply eine Funktion definiert, kann sie ausgeführt werden, ohne dass irgendetwas ausgeführt wird. Natürlich würde dies die Zusammenarbeit von beiden Seiten erfordern ala JSONP

%Vor%     
hugomg 12.01.2012 22:26
quelle
0

Angenommen, Sie kontrollieren den Server, der die Seite liefert, in die Sie die fragliche JS laden wollen, ist der einfachste Weg, die URL über AJAX an Ihren Server zu senden, von dort zu laden (zB via PHP file_get_contents ($ url );) und es als Ergebnis des AJAX-Aufrufs zurückbekommen.

    
Eugen Rieck 12.01.2012 22:30
quelle

Tags und Links