<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
  <meta content="text/html;charset=ISO-8859-1" http-equiv="Content-Type">
  <title></title>
</head>
<body bgcolor="#ffffff" text="#000000">
Jonas Sicking wrote:
<blockquote
 cite="mid:AANLkTinbjJSvHZfAwsxxFC-bg-zBxjDbymuo3y8eUpCO@mail.gmail.com"
 type="cite">
  <pre wrap="">On Tue, Aug 17, 2010 at 2:17 PM, John J Barton
<a class="moz-txt-link-rfc2396E" href="mailto:johnjbarton@johnjbarton.com"><johnjbarton@johnjbarton.com></a> wrote:
  </pre>
  <blockquote type="cite">
    <pre wrap=""><a class="moz-txt-link-abbreviated" href="mailto:whatwg-request@lists.whatwg.org">whatwg-request@lists.whatwg.org</a> wrote:
    </pre>
    <blockquote type="cite">
      <pre wrap="">Date: Mon, 16 Aug 2010 21:15:35 -0700
From: Jonas Sicking <a class="moz-txt-link-rfc2396E" href="mailto:jonas@sicking.cc"><jonas@sicking.cc></a>
To: WHAT Working Group <a class="moz-txt-link-rfc2396E" href="mailto:whatwg@whatwg.org"><whatwg@whatwg.org></a>
Subject: [whatwg] <script> features
Message-ID:
       <a class="moz-txt-link-rfc2396E" href="mailto:AANLkTin3t5ZB4DrUxJ8WS_hiuSgs3pMoZL8WOgRTCkfq@mail.gmail.com"><AANLkTin3t5ZB4DrUxJ8WS_hiuSgs3pMoZL8WOgRTCkfq@mail.gmail.com></a>
Content-Type: text/plain; charset=ISO-8859-1

Hi All,

I'd like to propose a couple of simple features to make <script>
elements more useful:

1. document.currentScript

This property returns the currently executing <script>, if any.
Returns null if no <script> is currently executing. In the case of
several nested executing <script>s, it returns the innermost one. This
is useful for being able to pass parameters to the script by setting
data- attributes on the script element.

      </pre>
    </blockquote>
    <pre wrap="">I wonder if you mean: "This property returns the <script> tag defining the
currently executing top-level function"?
So for:
<script>
var foo = function() {
alert("a foo");
}
foo();
window.addEventListener("load", foo, false);
</script>
the property will be null until the <script> tag is parsed and passed to the
compiler. Then the property will point to the script tag during the
execution of the outer or top level function which defines foo, calls foo,
and sets foo as a load handler. Then the property is null again. When the
load event runs, the property is null.
    </pre>
  </blockquote>
  <pre wrap=""><!---->
That is correct. </pre>
</blockquote>
Well either this is correct *or* you fire the event before compiling
(see below). I think my description is not correct, and that's good.<br>
<blockquote
 cite="mid:AANLkTinbjJSvHZfAwsxxFC-bg-zBxjDbymuo3y8eUpCO@mail.gmail.com"
 type="cite">
  <pre wrap="">Though it's not related to if the script is top-level
or not. It's simply related to *when* the script statements execute.
  </pre>
</blockquote>
(It's the function that is top-level.)<br>
<br>
I guess you mean by "execute the <script>", "compile the source
in the tag and run the top-level function"?<br>
<br>
<br>
<blockquote
 cite="mid:AANLkTinbjJSvHZfAwsxxFC-bg-zBxjDbymuo3y8eUpCO@mail.gmail.com"
 type="cite">...
  <blockquote type="cite">
    <blockquote type="cite">
      <pre wrap="">
seeing. For example installing compatibility shims for older browsers.

      </pre>
    </blockquote>
    <pre wrap="">But by the time the functions execute, the environment of compilation has
already been bound into the functions. I think you want the event *before*
compilation.
    </pre>
  </blockquote>
  <pre wrap=""><!---->
Sure </pre>
</blockquote>
Ok, so before compilation and hence my description above is *not*
correct. Good.
<blockquote
 cite="mid:AANLkTinbjJSvHZfAwsxxFC-bg-zBxjDbymuo3y8eUpCO@mail.gmail.com"
 type="cite">
  <pre wrap="">(though I'm not sure which environment is compiled in other than
the global object, which you can't replace anyway, at least not for
now).
  </pre>
</blockquote>
Well if I intercept the event and change the source to <br>
  with(browserShim) {<br>
     ... script tag contents here....<br>
  }<br>
Then I compile into another environment. Otherwise how can I achieve
your goal?<br>
<blockquote
 cite="mid:AANLkTinbjJSvHZfAwsxxFC-bg-zBxjDbymuo3y8eUpCO@mail.gmail.com"
 type="cite">
  <pre wrap="">
  </pre>
  <blockquote type="cite">
    <pre wrap="">If this kind of event were provided for all compilations, Javascript
debugging would make a quantum leap forward in performance and reliability.
Firebug, for example, uses egregious hacks to fake these events on the
mozilla platform.
    </pre>
  </blockquote>
  <pre wrap=""><!---->
This feature is not enough for that. For example this event is not
fired for onXXX event handlers, calls to eval(), calls to the Function
constructor, calls to WorkerGlobalScope.importScripts or loading of
Workers and SharedWorkers.
  </pre>
</blockquote>
But if you don't cover these paths then I don't think the feature is
complete, because what ever developers do in top-level functions of
script tag source they do in all those other cases too.<br>
<blockquote
 cite="mid:AANLkTinbjJSvHZfAwsxxFC-bg-zBxjDbymuo3y8eUpCO@mail.gmail.com"
 type="cite">
  <pre wrap="">
For debugging APIs I suggest platform specific notification mechanisms
as they are much more performant and easier to implement.
  </pre>
</blockquote>
Well I was just suggesting another use case for your suggested feature.
You are suggesting an introspection feature that also has potential for
debugging. Web debuggers are mostly based on introspection APIs, a
notable exception being Javascript control. Your feature would be good
step in that direction.<br>
jjb<br>
<blockquote
 cite="mid:AANLkTinbjJSvHZfAwsxxFC-bg-zBxjDbymuo3y8eUpCO@mail.gmail.com"
 type="cite">
  <pre wrap="">
/ Jonas
  </pre>
</blockquote>
<br>
</body>
</html>