Re: Should MutationObservers be able to observe work done by the HTML parser?

I used MutationObservers for the first time last night (in Chrome),
and I was surprised by this behavior. I was working on something that
transmogrified one node into another, so having observers file during
parsing would have helpful. Otherwise something like:

<script>var observer = new MutationObserver(/* observer that
manipulates <foo> tags */);</script>
<body>
....
<foo></foo>
<script>
  /* code that acts on foo tags */
</script>

If I have to use DOMContentLoaded, then the code in the second
<script> block would get a chance to operate on <foo> before my
observer had had a chance to transmogrify it.

Mihai

On Fri, Jun 15, 2012 at 4:36 PM, Adam Klein <adamk@chromium.org> wrote:
> Re-sending from correct address:
>
> On Fri, Jun 15, 2012 at 4:35 PM, Adam Klein <adamk@google.com> wrote:
>>
>> This code alerts in Firefox but not in Chrome:
>>
>> <!DOCTYPE html>
>> <body>
>>   <script>
>>     var observer = new MutationObserver(function(r) {
>>       alert(r);
>>     });
>>     observer.observe(document.body, {childList: true, subtree: true});
>>   </script>
>>   <p>Hello, World</p>
>> </body>
>>
>> In WebKit's implementation, we had assumed that MutationObservers were
>> meant to observe changes after page load (and I personally thought that we'd
>> specced it that way, by putting it in DOM4, not HTML). But it seems the
>> Mozilla implementors made a different assumption. But what should happen?
>>
>> IMHO, it may not be worth the gain may not be worth the possible
>> performance degradation. If script wants to find out what the parser put on
>> the page, it should wait for DOMContentLoaded. But I can imagine a use case
>> where script might want to find out about the parser's work during load.
>>
>> In any case, we should try to come to a decision about this, since this
>> seems to be the one major divergence between the existent implementations of
>> MutationObservers.
>>
>> Thoughts?
>>
>> - Adam
>
>

Received on Saturday, 16 June 2012 01:16:07 UTC