- From: cathiechen via GitHub <sysbot+gh@w3.org>
- Date: Thu, 28 Mar 2019 13:15:41 +0000
- To: public-css-archive@w3.org
Thanks Simon:) I'd like to share some specific scenarios we discussed. 1. Frame tree changed in js callback. It's not safe to deliver RO in a frame, since it might be deleted while invoke js callbacks. frameset.html ``` <frameset rows="50%, 50%"> <frame id="frame1" src="./frame1.html"></frame> <frame id="frame2" src="./frame2.html"></frame> </frameset> ``` frame1.html ``` frame1 ``` frame2.html ``` <script type="text/javascript"> function test0() { let ro = new ResizeObserver(entries => { for (let entry of entries) { if (entry.target.parentNode) { entry.target.parentNode.removeChild(entry.target); } } }); let frame1 = parent.document.querySelector('#frame1'); let frame2 = parent.document.querySelector('#frame2'); ro.observe(frame1); ro.observe(frame2); } test0(); </script> ``` 2. The observed target moved to a new document. frameset.html ``` <frameset rows="50%, 50%"> <frame id="frame1" src="./frame1.html"></frame> <frame id="frame2" src="./frame2.html"></frame> </frameset> ``` frame1.html ``` <div id="target1">t1</div> ``` frame2.html ``` <div id="target2">t2</target> <script> var ro = new ResizeObserver( entries => { for (let entry of entries) { let target1 = parent.frames[0].document.querySelector('#target1'); entry.target.parentElement.removeChild(entry.target); target1.parentElement.appendChild(entry.target); } }); ro.observe(document.querySelector('#target2')); </script> ``` 3. All targets of ResizeObserver are from other document. RO should be fired even its document is layout clean. frameset.html ``` <frameset rows="50%, 50%"> <frame id="frame1" src="./frame1.html"></frame> <frame id="frame2" src="./frame2.html"></frame> </frameset> ``` frame1.html ``` <div id="target1">t1</div> ``` frame2.html ``` <script> var ro = new ResizeObserver( entries => { for (let entry of entries) { console.log("Observe targets from other document."); } }); let target1 = parent.frames[0].document.querySelector('#target1'); ro.observe(target1); </script> ``` 4. The depth of target: Calculate the depth of target in frame tree not just current frame. ``` <div style="width:100px;height:100px;">t1 <div id="target" style="width:100px;height:100px;">t2 <iframe id="iframe" src="./frame1.html" onload="depth()"></iframe> </div> </div> <script> function depth() { let target = document.querySelector('#target'); let target1 = document.querySelector('#iframe').contentDocument.querySelector('#target1'); var ro = new ResizeObserver( entries => { for (let entry of entries) { if (entry.target == target) { target1.style.width = "200px"; console.log("There should no error event. target1 is deeper than target."); } } }); ro.observe(target); ro.observe(target1); } </script> ``` frame1.html ``` <div id="target1"></div> ``` -- GitHub Notification of comment by cathiechen Please view or discuss this issue at https://github.com/w3c/csswg-drafts/issues/3703#issuecomment-477589834 using your GitHub account
Received on Thursday, 28 March 2019 13:15:42 UTC