- From: Boris Zbarsky <bzbarsky@mit.edu>
- Date: Thu, 17 Mar 2005 22:35:32 -0600
- To: www-svg@w3.org, jim@jibbering.com
- CC: ian@hixie.ch
This is a somewhat belated reply to Jim's reply [1] to my original mail about
the issue of XBL bindings being notified when a node is inserted into the
document [2].
I made an attempt to design things using DOMNodeInsertedIntoDocument, and
discovered two major problems. First, and less importantly, event firing order
in the DOM spec is badly underdefined (so it's not clear in which order
DOMNodeInsertedIntoDocument is fired on the nodes of a subtree that's inserted
into the document). Second, it's possible for DOMNodeInsertedIntoDocument to
fire on a node that's not in the document anymore.
Indeed, consider the following simple scenario:
A) There is a capturing DOMNodeInsertedIntoDocument listener on the root
element that simply does:
var node = event.target;
node.parentNode.removeChild(node);
B) A node is inserted as a child of this root.
In this case, the order of event firing (for simplicity, I list just the
DOMNodeInsertedIntoDocument and DOMNodeRemovedFromDocument events; there are
also some DOMNodeInserted and DOMNodeRemoved events flying about) is the
following (the two nodes involved will be called "root" and "child"):
1) Capturing DOMNodeInsertedIntoDocument event on root
2) Capturing DOMNodeRemovedFromDocument event on root
3) At-target DOMNodeRemovedFromDocument event on child
4) At-target DOMNodeInsertedIntoDocument event on child
Note that by step 4 the child isn't actually in the document anymore.
Worse, given the constraints that capturing exists, that all events capture,
that any event listener is allowed to modify the DOM, there is no way to avoid
this scenario if a DOM event is used as the trigger for "we're completely set up
now".
I'm frankly somewhat at a loss as to what can be done about this. My initial
temptation is to create some Mozilla-XBL specific syntax for the binding to be
notified when a node is inserted into the document and all relevant mutation
events have fired without the node being removed in the process...
-Boris
[1] http://lists.w3.org/Archives/Public/www-svg/2004Oct/0130.html
[2] http://lists.w3.org/Archives/Public/www-svg/2004Oct/0127.html
Received on Friday, 18 March 2005 04:36:04 UTC