- From: David Flanagan <dflanagan@mozilla.com>
- Date: Fri, 28 Oct 2011 14:20:47 -0700
Here's another ambiguity about the "child nodes are changed" trigger for executing a script element. What is the correct behavior for the following code? <script> window.onload = test; function test() { var s = document.createElement("script"); document.head.appendChild(s); var f = document.createDocumentFragment(); f.appendChild(document.createTextNode("alert(document.scripts[1].text);")); f.appendChild(document.createTextNode("alert(2);")); f.appendChild(document.createTextNode("alert(3);")); s.appendChild(f); alert(s.text); } </script> In Firefox, the code in all three text nodes runs, so there are 4 alerts in total, and the first and the fourth display the same text: the concatenation of the three text nodes. In Chrome, Safari and Opera (I can't test on IE), only the first text node is run as a script. There are two alerts. The first displays the content of the first text node, and the second alert displays the concatenation of all three text nodes. I would guess that Firefox's behavior is correct here, because DOM4 specifies the algorithm for DocumentFragment insertion without using recursion. But its not really specified clearly there either. Does the HTML spec need a clarifying note on this point? (I also plan to raise this issue on the www-dom mailing list) David On 10/28/11 12:07 PM, David Flanagan wrote: > On 10/28/11 12:03 PM, Bjoern Hoehrmann wrote: >> * David Flanagan wrote: >>> All browsers do that correctly. The case I'm interested in is this >>> one: >>> >>> var s1 = document.createElement("script"); >>> var t1 = document.createTextNode(""); >>> s1.appendChild(t1); >>> document.head.appendChild(s1); >>> t1.appendData("alert('changed text node data');"); >>> >>> Firefox runs this script and Chrome, Safari and Opera do not. (I don't >>> have a windows installation, so I haven't tested IE) >> In "IE9 standards" mode IE9 displays the alert. >> > Thanks, Bjoern. That makes it a lot harder for me to argue that the > spec should change to match Chrome, Safari and Opera... But can we at > least change "when child nodes change" to something like "when the > text IDL attribute changes from the empty string to a non-empty string"? > > David
Received on Friday, 28 October 2011 14:20:47 UTC