2010-03-26 10 views
11

Ho sotto il codice per inserire uno stile in DOM (c'è un caso d'uso per iniettare lo stile in DOM quindi per favore non chiedere perché o dici di caricare il css nel file .css).Errore di Chrome con NO_MODIFICATION_ALLOWED_ERR DOM Eccezione 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> 

Se corro in Firefox, funziona correttamente. Ma ho ricevuto questo errore in Google Chrome:

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

Qualcuno ha una correzione? Grazie

+1

apparire come il mio problema è descritto qui http://code.google.com/p/chromium/issues/detail?id=3976#makechanges~~V~~singular~~3rd quindi mi chiedo se "c'è un modo di aggirare ?? " Grazie –

risposta

9

Penso che sia perché si utilizza innerHTML quando si utilizza la sintassi XML in qualsiasi altro luogo. Prova:

bmstyle.nodeValue = styleStr; 

Suggerimento 2:

Potrebbe anche essere perché si sta cercando di impostare l'innerHTML di un elemento non ancora nel DOM HTML. Se questo è il caso, il mio primo suggerimento dovrebbe comunque reggere, oppure si può andare con:

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

non sono sicuro se avessi bisogno di una linea inbetween per recuperare l'elemento o se il bmstyle sarebbe ancora puntare ad esso.

+0

Devo dire che poiché il DOM in questo caso è un DOM HTML, non dovrebbe avere importanza. Ma Chrome potrebbe essere pissing quando non si imposta esplicitamente la variabile dell'elemento DOM come HTML. – Anthony

+0

Ho usato il tuo suggerimento 2 e ha ancora errori. Ho usato il suggerimento 1 con nodeValue, non ha errori, ma il tag di stile non ha nulla in esso (btw, ho corretto di aggiungere} alla fine). Dovrei inserire invece nell'intestazione e come? –

+0

Grazie per questo!Molto utile –

1

E potrebbe essere perché è valida per mettere <style> elementi all'interno del corpo, ma ad essere onesti Sarei sorpreso

2

Anche a me, ho avuto questo problema, provate questo:

bmstyle.value = styleStr; 
1

Provare a utilizzare:

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

Utilizzare innerText/textContent. Oppure creare un nodo di testo con gli stili e aggiungerlo al tag di stile. Non è perché lo stile è nel corpo, in più puoi sempre aggiungerlo alla testa, che non risolve il problema.

3

Solo una nota per riferimento futuro ... Sto usando la seguente funzione per creare dinamicamente stili CSS. Ho scoperto che l'utilizzo di textContent ha funzionato al meglio.

Questo rompe su Safari

el.innerHTML = css.join('\n'); 

Questo rompe su FireFox

el.innerText = css.join('\n'); 

Quello che segue è il mio codice finale che funziona su entrambi i browser. IE non testato ...

/** 
* 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); 
} 
Problemi correlati