> On Feb 24, 2016, at 9:06 PM, Elliott Sprehn <espr...@chromium.org> wrote:
> 
> Can you give a code example of how this happens?

For example, execCommand('Delete') would result in sequentially deleting nodes 
as needed.
During this compound operation, unload events may fire on iframes that got 
deleted by this operation.

I would like components to be notified that they got removed/disconnected from 
the document
before such an event is getting fired.

```html
<script>

ElementWithInDocumentFlag extends HTMLElement {
  constructor(...args) {
     super(...args);
     this.inDocument = false;
  }

  connectedWithDocument() {
     this.inDocument = true;
  }

  disconnectedWithDocument() {
     this.inDocument = false;
  }
}

document.defineElement('hello-world', ElementWithInDocumentFlag);

</script>
<div id="editor" contenteditable>
  <hello-world></hello-world>
  <iframe src="about:blank"></iframe>
  sucks
</div>
<script>

var helloWorld = document.querySelector('hello-world');
var container = document.getElementById('editor');

setTimeout(function () {
  document.querySelector('iframe').contentWindow.onunload = function () {
    console.log(container.innerHTML); // This does not contain hello-world
    console.assert(!helloWorld.inDocument); // This should be false!
  }
  container.focus();
  getSelection().selectAllChildren(container);
  setTimeout(function () {
    document.execCommand('Delete');
  }, 500);
}, 500);

</script>
```

- R. Niwa


Reply via email to