2010-03-26 48 views
11

铬的错误,我有下面的代码中插入一个风格融入DOM(有一个用例注射风格融入DOM,所以请不要问为什么,或者说加载在.css文件中的CSS)。与NO_MODIFICATION_ALLOWED_ERR DOM异常7

<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中运行,它工作正常。但我在谷歌浏览器中出现这个错误:

Line bmstyle.innerHTML = styleStr; 
Uncaught Error: NO_MODIFICATION_ALLOWED_ERR: DOM Exception 7 

有没有人有修复?由于

+1

看起来像我的问题在这里描述http://code.google.com/p/chromium/issues/detail?id=3976#makechanges所以我不知道是否“有没有如何解决?“谢谢 – 2010-03-28 05:42:50

回答

9

我想这是因为你使用innerHTML当其他地方使用XML语法。尝试:

bmstyle.nodeValue = styleStr; 

建议2:

这也可能是因为你试图在HTML DOM设置元素的innerHTML还没有。如果是这样的话,我的第一个建议还是应该抱起来,或者你可以去:

document.body.appendChild(bmstyle); 
bmstyle.innerHTML = styleStr; 

我不知道,如果你需要一个行其间收回元素,或者如果bmstyle仍然将指向到它。

+0

我应该提到,由于这种情况下的DOM是一个HTML DOM,它应该没有关系。但是,如果您没有将DOM元素变量明确设置为HTML,Chrome可能会变得很糟糕。 – Anthony 2010-03-26 07:50:51

+0

我用你的建议2,它仍然有错误。我曾经建议1的nodeValue,它没有任何错误,但风格标签中有什么(顺便说一句,我纠正补充}末)。我应该插入标题,而不是如何? – 2010-03-27 02:55:39

+0

感谢您的支持!非常有帮助 – 2010-09-19 16:58:20

1

可能是因为它是无效的把<style>元素在体内,但说实话,我会感到很惊讶

2

我也是,我有这个问题,试试这个:

bmstyle.value = styleStr; 
1

尝试使用:

<f:view xmlns:f="http://java.sun.com/jsf/core" contentType="text/html" /> 
1

使用的innerText /的textContent。 或者用样式创建一个文本节点,并将其添加到样式标签。 这不是因为风格是在身,再加上你可以随时把它添加到头部,这并不解决问题。

3

刚一说明以供将来参考...我使用下面的函数来动态创建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); 
}