查過後才發現 IE 會限制部分Element的 innerHTML 屬性值的設定
col, colgroup, frameset, html, style, table, tbody, tfoot, thead, title, tr
上述標籤的innerTML attribute 在 IE 中均為唯讀
以下有兩種處理方式可通用在所有瀏覽器中
1.
....
var se = document.getElementById("ieStyleApplier");
se.innerHTML = "";
se.innerHTML = "_<style>" + o.responseText + "</style>";
...
先設定一個空的div element
再再將CSS內容將入到div的範圍內用(本例中的o.responseText 為Ajax取得CSS內容)
注意stye tag 前加入 '_' 作為前綴字元(prefix character)
這是避免IE解析div element時讀到style tag會停止解析的情形
猜測這是IE的安全性考量
加入前綴字元後就沒問題了,也可以對應到其他的browser
2.
(function(o){
var newStyle = document.createElement("link");
newStyle.rel = "stylesheet";
newStyle.href = o;
var head = document.getElementsByTagName('head')[0];
if(head)
head.appendChild(newStyle);
else
document.body.appendChild(newStyle);
})(url);
用一次性的函式動態加入link element後引入CSS
col, colgroup, frameset, html, style, table, tbody, tfoot, thead, title, tr
上述標籤的innerTML attribute 在 IE 中均為唯讀
以下有兩種處理方式可通用在所有瀏覽器中
1.
....
var se = document.getElementById("ieStyleApplier");
se.innerHTML = "";
se.innerHTML = "_<style>" + o.responseText + "</style>";
...
先設定一個空的div element
再再將CSS內容將入到div的範圍內用(本例中的o.responseText 為Ajax取得CSS內容)
注意stye tag 前加入 '_' 作為前綴字元(prefix character)
這是避免IE解析div element時讀到style tag會停止解析的情形
猜測這是IE的安全性考量
加入前綴字元後就沒問題了,也可以對應到其他的browser
2.
(function(o){
var newStyle = document.createElement("link");
newStyle.rel = "stylesheet";
newStyle.href = o;
var head = document.getElementsByTagName('head')[0];
if(head)
head.appendChild(newStyle);
else
document.body.appendChild(newStyle);
})(url);
用一次性的函式動態加入link element後引入CSS
沒有留言:
張貼留言