Как мы все знаем, те, кто занимается фронтальным разработкой, хотят несколько раз пнуть разработчиков. Репутация разработчиков IE не меньше, чем у разработчиков GFW. Они разрушают рынок против своей совести, и каждый может наказать их. Тем не менее, в этих местах в Китае нет способа поклониться реальности.
Недавно наш продукт должен динамически загружать кусок CSS в браузере, и предыдущий код использовался напрямую:
Кода -копия выглядит следующим образом:
var bubblecss = document.createElement ('style');
bubblecss.type = 'text/css';
bubblecss.innerhtml = blc_conf.bubblestyle;
document.getElementsbytagname ('head') [0] .appendchild (bubblecss);
Тем не менее, это поддерживается только IE9, и в IE8 будут проблемы. Я никогда этого не замечал. Я не нашел его до тех пор, пока недавно не изменил и сделал полный тест.
Я нашел трюк в Интернете. Я попробовал это, и это работает, но есть некоторые проблемы
Кода -копия выглядит следующим образом:
window.bc_bubble_css = blc_conf.bubblestyle;
document.createstyleSheet ("JavaScript: bc_bubble_css");
Здесь вы можете создать стиль, определяемый переменной bc_bubble_css. Тем не менее, поскольку HTML5 постепенно становится популярным, некоторые селекторы CSS3 также смешаны в нашем CSS. Использование этого метода приведет к тому, что анализатор IE8 выдвинул исключение, когда диапазон проанализируется на селектор CSS3 и останавливает анализ последующих CSS. Это делает CSS загружаться только на полпути. Методы, найденные в Интернете, предназначены для использования AddRule типа стиля для увеличения, но это требует от вас указания селектора CSS2 и стиля.
Следовательно, необходимо разобрать одно правило от CSS, а затем вызовать AddRule по очереди. Пример:
Кода -копия выглядит следующим образом:
var s = document.createstyleSheet ();
var rules = blc_conf.bubblestyle.replace (///*[^/*]*/*// g, "") .Replace (/@[^{]*/{/g, '') .match (/[^/{/}]+/{[^/}]+/}/g);
for (var i = 0; i <ravels.length; i ++) {
var m = правила [i] .match (/(.*)/ s*/{/s*(.*)/}/);
if (m) {
пытаться {
S.Addrule (M [1], M [2]);
} catch (e) {
}
}
}
Вначале есть две замены, удаляя взгляд и часть селектора CSS3, но все еще есть селекторы, которые пропускают сеть, и вам нужно поймать его позже, пытаясь поймать.
Кроме того, я презираю тех, кто снова разрабатывает интерфейсы, т.е.