2011-04-11 51 views
6

我有以下代碼IE 8和7的錯誤時動態地添加樣式表

var style = document.createElement('style'); 
style.setAttribute("type", "text/css"); 
if (style.textContent) { // FF, Safari 
    style.textContent = this.arg.css; 
} else { 
    style.innerHTML = this.arg.css;// FF, IE 
} 
document.getElementsByTagName('head')[0].appendChild(style); 

這工作正常,在所有瀏覽器(也即9),但IE7和IE8,我收到以下錯誤

SCRIPT600:未知的運行錯誤

錯誤點到線

style.innerHTML = this.arg.css;// FF, IE 

怎麼了?

+0

什麼this.arg.css的內容是什麼? – 2011-04-11 08:47:24

回答

9

你可以試試這個方法

var style = document.createElement('style'); 
var text = this.arg.css; 
style.setAttribute("type", "text/css"); 
if (style.styleSheet) { // for IE 
    style.styleSheet.cssText = text; 
} else {    // others 
    var textnode = document.createTextNode(text); 
    style.appendChild(textnode); 
} 
var h = document.getElementsByTagName('head')[0]; 
h.appendChild(style); 
+0

謝謝,它的工作原理。只是好奇,知道如何「var textnode = document.createTextNode(text);」有用嗎? – 2011-04-11 08:53:28

+0

這只是一個DOM方式,它使用appendChild爲任何新元素(甚至文本) – 2011-04-11 08:56:36

+0

我在IE8中看到一些情況,其中style.styleSheet爲空,所以如果失敗,它落在其他,然後拋出未知的運行時錯誤。任何想法爲什麼styleSheet將爲空? – Herms 2013-09-13 20:42:02