Apakah mungkin untuk mengimpor stylesheet css ke halaman html menggunakan Javascript? Jika demikian, bagaimana itu bisa dilakukan?
PS javascript akan di-host di situs saya, tetapi saya ingin pengguna dapat memasukkan <head>
tag situs web mereka, dan itu harus dapat mengimpor file css yang di-host di server saya ke halaman web saat ini. (baik file css dan file javascript akan di-host di server saya).
javascript
html
css
dhtml
Klik Upvote
sumber
sumber
Jawaban:
Inilah cara "jadul" untuk melakukannya, yang diharapkan bekerja di semua browser. Secara teori, Anda akan menggunakan
setAttribute
sayangnya IE6 tidak mendukungnya secara konsisten.Contoh ini memeriksa apakah CSS sudah ditambahkan sehingga hanya menambahkannya sekali.
Masukkan kode itu ke file javascript, minta pengguna akhir cukup memasukkan javascript, dan pastikan path CSS absolut sehingga dimuat dari server Anda.
VanillaJS
Berikut adalah contoh yang menggunakan JavaScript biasa untuk menyuntikkan tautan CSS ke
head
elemen berdasarkan bagian nama file URL:Masukkan kode tepat sebelum
head
tag penutup dan CSS akan dimuat sebelum halaman diberikan. Menggunakan.js
file JavaScript ( ) eksternal akan menyebabkan Flash konten tanpa gaya ( FOUC ) muncul.sumber
link.onload = function(){ ... }
sebelum menambahkanJika Anda menggunakan jquery:
sumber
$('head').append('<link rel="stylesheet" type="text/css" href="https://dl.dropboxusercontent.com/s/ep1nzckmvgjq7jr/remove_transitions_from_page.css">');
Saya kira sesuatu seperti script ini akan lakukan:
File JS ini berisi pernyataan berikut:
Alamat javascript dan css harus mutlak jika mereka merujuk ke situs Anda.
Banyak teknik impor CSS dibahas dalam artikel "Katakan tidak pada peretasan CSS dengan teknik percabangan" ini.
Tetapi artikel "Menggunakan JavaScript untuk menambahkan secara dinamis Portlet CSS stylesheet" juga menyebutkan kemungkinan CreateStyleSheet (metode kepemilikan untuk IE):
sumber
document.createStyleSheet()
ke browser yang tidak memilikinya: stackoverflow.com/questions/524696/…document.write
tidak disarankan karena menimpa seluruh tubuh situs web Anda.<style>
elemen alih-alih mengasumsikan itu anak pertama<head>
via("head")[0]
?var style = document.getElementsByTagName("style")[0];
Element.insertAdjacentHTML memiliki dukungan browser yang sangat baik, dan dapat menambahkan stylesheet dalam satu baris.
sumber
Jika Anda ingin tahu (atau menunggu) sampai gaya itu sendiri dimuat ini berfungsi:
sumber
Saya tahu ini adalah utas yang cukup lama tetapi inilah 5 sen saya.
Ada cara lain untuk melakukan ini tergantung pada apa kebutuhan Anda.
Saya memiliki kasus di mana saya ingin file css aktif hanya sebentar. Seperti css switching. Aktifkan css dan kemudian setelah acara lain matikan.
Alih-alih memuat css secara dinamis dan kemudian menghapusnya Anda dapat menambahkan Kelas / id di depan semua elemen di css baru dan kemudian hanya beralih kelas / id dari simpul dasar css Anda (seperti tag tubuh).
Anda akan dengan solusi ini memiliki lebih banyak file css pada awalnya dimuat tetapi Anda memiliki cara yang lebih dinamis untuk beralih tata letak css.
sumber
Di peramban modern Anda dapat menggunakan
promise
seperti ini. Buat fungsi loader dengan janji di dalamnya:Maka jelas Anda ingin sesuatu dilakukan setelah CSS dimuat. Anda dapat memanggil fungsi yang perlu dijalankan setelah CSS dimuat seperti ini:
Tautan yang berguna jika Anda ingin memahami cara kerjanya secara mendalam:
Dokumen resmi tentang janji
Panduan yang berguna untuk janji-janji
Video intro yang bagus tentang janji
sumber
Gunakan kode ini:
sumber
Ada plugin jquery umum yang memuat file css dan JS synch dan asych on demand. Itu juga melacak apa yang sudah dimuat :) lihat: http://code.google.com/p/rloader/
sumber
Inilah cara dengan metode pembuatan elemen jQuery (preferensi saya) dan dengan panggilan balik
onLoad
:sumber
The perpustakaan YUI mungkin apa yang Anda cari. Ini juga mendukung pemuatan lintas domain.
Jika Anda menggunakan jquery, plugin ini melakukan hal yang sama.
sumber
Anda dapat menggunakan untuk perpustakaan YUI ini atau menggunakan artikel ini untuk mengimplementasikan
sumber
Di bawah ini adalah kode lengkap yang digunakan untuk memuat JS dan / atau CSS
sumber
Saya ingin berbagi satu cara lagi untuk memuat tidak hanya css tetapi semua aset (js, css, gambar) dan menangani acara onload untuk banyak file. Ini
async-assets-loader
. Lihat contoh di bawah ini:Menurut async-aset-loader docs
sumber
Saya menggunakan thymeleaf dan ini berfungsi dengan baik. Terima kasih
sumber
th:href
atribut di sisi klien? Itu tidak akan diproses oleh Thymeleaf jadi sepertinya berlebihan di sini.