Ist es möglich, CSS-Stylesheets mit Javascript in eine HTML-Seite zu importieren? Wenn ja, wie geht das?
PS: Das Javascript wird auf meiner Website gehostet, aber ich möchte, dass Benutzer das <head>
Tag ihrer Website einfügen können, und es sollte in der Lage sein, eine auf meinem Server gehostete CSS-Datei in die aktuelle Webseite zu importieren. (Sowohl die CSS-Datei als auch die Javascript-Datei werden auf meinem Server gehostet).
javascript
html
css
dhtml
Klicken Sie auf Upvote
quelle
quelle
Antworten:
Hier ist die "alte Schule", die hoffentlich in allen Browsern funktioniert. Theoretisch würden Sie
setAttribute
IE6 leider nicht konsequent unterstützen.In diesem Beispiel wird überprüft, ob das CSS bereits hinzugefügt wurde, sodass es nur einmal hinzugefügt wird.
Fügen Sie diesen Code in eine Javascript-Datei ein, lassen Sie den Endbenutzer einfach das Javascript einfügen und stellen Sie sicher, dass der CSS-Pfad absolut ist, damit er von Ihren Servern geladen wird.
VanillaJS
Hier ist ein Beispiel, das einfaches JavaScript verwendet, um einen CSS-Link
head
basierend auf dem Dateinamen-Teil der URL in das Element einzufügen:Fügen Sie den Code unmittelbar vor dem schließenden
head
Tag ein und das CSS wird geladen, bevor die Seite gerendert wird. Die Verwendung einer externen JavaScript (.js
) - Datei führt dazu, dass ein Flash mit nicht gestylten Inhalten ( FOUC ) angezeigt wird .quelle
link.onload = function(){ ... }
vor dem Anhängen anhängenWenn Sie jquery verwenden:
quelle
$('head').append('<link rel="stylesheet" type="text/css" href="https://dl.dropboxusercontent.com/s/ep1nzckmvgjq7jr/remove_transitions_from_page.css">');
Ich denke, so etwas würde dieses Skript tun:
Diese JS-Datei enthält die folgende Anweisung:
Die Adresse von Javascript und CSS muss absolut sein, wenn sie auf Ihre Site verweisen sollen.
Viele CSS-Importtechniken werden in diesem Artikel "Nein zu CSS-Hacks mit Verzweigungstechniken" erläutert .
Der Artikel "Verwenden von JavaScript zum dynamischen Hinzufügen von Portlet-CSS-Stylesheets" erwähnt jedoch auch die Möglichkeit " CreateStyleSheet" (proprietäre Methode für IE):
quelle
document.createStyleSheet()
mir ausgedacht habedocument.write
wird nicht empfohlen, da es den gesamten Körper Ihrer Website überschreibt.<style>
Element direkt abzurufen, anstatt anzunehmen, dass es das erste untergeordnete Element von<head>
via ist("head")[0]
?var style = document.getElementsByTagName("style")[0];
Element.insertAdjacentHTML bietet eine sehr gute Browserunterstützung und kann ein Stylesheet in einer Zeile hinzufügen.
quelle
Wenn Sie wissen möchten (oder warten möchten), bis der Stil selbst geladen wurde, funktioniert dies:
quelle
Ich weiß, dass dies ein ziemlich alter Thread ist, aber hier kommen meine 5 Cent.
Es gibt eine andere Möglichkeit, dies zu tun, je nachdem, was Ihre Bedürfnisse sind.
Ich habe einen Fall, in dem ich möchte, dass eine CSS-Datei nur eine Weile aktiv ist. Wie CSS-Umschaltung. Aktivieren Sie das CSS und deaktivieren Sie es nach einem anderen Ereignis erneut.
Anstatt das CSS dynamisch zu laden und dann zu entfernen, können Sie eine Klasse / eine ID vor allen Elementen in der neuen CSS hinzufügen und dann einfach diese Klasse / ID des Basisknotens Ihrer CSS wechseln (wie z. B. Body-Tag).
Mit dieser Lösung würden anfangs mehr CSS-Dateien geladen, aber Sie haben eine dynamischere Möglichkeit, CSS-Layouts zu wechseln.
quelle
In einem modernen Browser können Sie
promise
dies verwenden. Erstellen Sie eine Laderfunktion mit einem Versprechen darin:Dann möchten Sie natürlich etwas tun, nachdem das CSS geladen wurde. Sie können die Funktion, die ausgeführt werden muss, nachdem CSS geladen wurde, folgendermaßen aufrufen:
Nützliche Links, wenn Sie genau wissen möchten, wie es funktioniert:
Offizielle Dokumente zu Versprechungen
Nützlicher Leitfaden für Versprechen
Ein großartiges Intro-Video über Versprechen
quelle
Verwenden Sie diesen Code:
quelle
Es gibt ein allgemeines JQuery-Plugin, das CSS- und JS-Dateien bei Bedarf synchronisieren und asychen lädt. Es verfolgt auch, was bereits geladen wurde :) siehe: http://code.google.com/p/rloader/
quelle
Hier ist ein Weg mit der Elementerstellungsmethode von jQuery (meine Präferenz) und mit dem Rückruf
onLoad
:quelle
Die YUI-Bibliothek könnte genau das sein, wonach Sie suchen. Es unterstützt auch das domänenübergreifende Laden.
Wenn Sie jquery verwenden, macht dieses Plugin dasselbe.
quelle
Sie können diese YUI-Bibliothek verwenden oder diesen Artikel zur Implementierung verwenden
quelle
Unten ein vollständiger Code zum Laden von JS und / oder CSS
quelle
Ich möchte eine weitere Möglichkeit nutzen, um nicht nur CSS, sondern alle Assets (JS, CSS, Bilder) zu laden und das Onload- Ereignis für die Reihe von Dateien zu verarbeiten. Es ist
async-assets-loader
. Siehe das folgende Beispiel:Laut den Async-Assets-Loader- Dokumenten
quelle
Ich benutze Thymeleaf und das funktioniert gut. Vielen Dank
quelle
th:href
, auf Client-Seite Attribute hinzuzufügen ? Es wird nicht von Thymeleaf verarbeitet, daher scheint es hier überflüssig zu sein.