Hi webkit-dev,

I'm looking at JS timeout code and found a callback behavior that seems
strange. Not sure if it is intentional.
If timeout is set on a 'window' object from another frame and timeout
callback is specified as a JS string, it is executed "inside the frame"...
So the context of execution is different depending how the callback is
specified.

Here is html (also attached) that loads an empty IFRAME and sets 2 timeouts
on that iframe's window - as a JS closure and as JS string. In former case,
the callback runs in the main page (expected, since the JS closure
'captures' the context in which it is defined), in the latter- inside iframe
(a bit weird?). So the text goes in both "body" elements.

Is there a reason why JS string is evaluated in the inner context of the
iframe? Would a test verifying this behavior be a good thing? Curiously, IE
and FF behave the same way.

<html>
<script>
function test() {
  // Get the iframe's window.
  var iframeWindow = window.frames["testIframe"];

  // setTimeout with a closure as callback.
  iframeWindow.setTimeout(
    function() {
      if (!document.body)
        document.write('<body></body>');
      document.body.appendChild(document.createTextNode('Timer 1
fired.'));}, 1);

  // setTimeout with a JS string containing similar code.
  iframeWindow.setTimeout(
     "if (!document.body)" +
     "  document.write('<body></body>');" +
     "document.body.appendChild(document.createTextNode('Timer 2
fired.'));", 1);
}
</script>
<body onLoad="test();">
<iframe src="about:blank" id="testIframe"></iframe>
</body>
</html>


Thanks,
Dmitry
_______________________________________________
webkit-dev mailing list
webkit-dev@lists.webkit.org
http://lists.webkit.org/mailman/listinfo.cgi/webkit-dev

Reply via email to