Ошибка Chrome с NO_MODIFICATION_ALLOWED_ERR DOM Exception 7
У меня есть код для вставки стиля в DOM (есть пример использования для вставки стиля в DOM, поэтому, пожалуйста, не спрашивайте, почему или скажите, чтобы загрузить css в файл .css).
<script type="text/javascript">
window.onload = function()
{
var bmstyle = document.createElement('style');
bmstyle.setAttribute('type', 'text/css');
var styleStr = "#test-div {background:#FFF;border:2px solid #315300;";
bmstyle.innerHTML = styleStr;
document.body.appendChild(bmstyle);
}
</script>
Если я запускаю в Firefox, он отлично работает. Но я получил эту ошибку в Google Chrome:
Line bmstyle.innerHTML = styleStr;
Uncaught Error: NO_MODIFICATION_ALLOWED_ERR: DOM Exception 7
У кого-нибудь есть проблема? Благодаря
Ответы
Ответ 1
Я думаю, это потому, что вы используете innerHTML
, когда везде используете синтаксис XML. Попробуйте:
bmstyle.nodeValue = styleStr;
Предложение 2:
Возможно, это также связано с тем, что вы пытаетесь установить innerHTML элемент еще не в HTML DOM. Если это случай, мое первое предложение должно все же задержать, или вы можете пойти с:
document.body.appendChild(bmstyle);
bmstyle.innerHTML = styleStr;
Я не уверен, нужна ли вам строка между ними, чтобы вернуть элемент, или если bmstyle все равно укажет на него.
Ответ 2
Просто примечание для будущей справки... Я использую следующую функцию для динамического создания стилей CSS. Я обнаружил, что использование textContent работает лучше всего.
Это нарушает Safari
el.innerHTML = css.join('\n');
Это разрывается на FireFox
el.innerText = css.join('\n');
Ниже приведен мой последний код, который работает в обоих браузерах. IE не тестировался...
/**
* Write out stylesheets to the page.
*
* @param {array} css
*/
function print_css(css) {
var headTag = document.getElementsByTagName('head')[0],
el = document.createElement('style');
el.type = 'text/css';
el.textContent = css.join('\n');
headTag.appendChild(el);
}
Ответ 3
Мне тоже, у меня была эта проблема, попробуйте это:
bmstyle.value = styleStr;
Ответ 4
Это может быть потому, что это недействительно для размещения элементов <style>
внутри тела, но, честно говоря, я был бы удивлен
Ответ 5
Попробуйте использовать:
<f:view xmlns:f="http://java.sun.com/jsf/core" contentType="text/html" />
Ответ 6
Использовать innerText/textContent.
Или создайте текст node со стилями и добавьте его в тег стиля.
Это не потому, что стиль находится в теле, плюс вы всегда можете добавить его в голову, что не устраняет проблему.