On 5/29/2011 5:42 AM, Mike Wilson wrote:
Hi John,

This event is actually already speced, see #14 "fire a simple event
named error at the element" in:
http://www.whatwg.org/specs/web-apps/current-work/#prepare-a-script
(and the onerror attribute is valid for all elements)
Thanks. I stopped before I got that far. Step 12.5:

"Ifeventis not anASCII case-insensitive <http://www.whatwg.org/specs/web-apps/current-work/#ascii-case-insensitive>match for either the string "|onload|" or the string "|onload()|", then the user agent must abort these steps at this point. The script is not executed."

Now I see I missed the *and* in the predicate for step 12, "If the|script <http://www.whatwg.org/specs/web-apps/current-work/#the-script-element>|element has an|event <http://www.whatwg.org/specs/web-apps/current-work/#attr-script-event>|attribute and a|for <http://www.whatwg.org/specs/web-apps/current-work/#attr-script-for>|attribute..."

(I've not seen a "for" attribute on a script element. Is there any documentation on what it does?)

Step 14 is unclear or incomplete however:
" If the|src <http://www.whatwg.org/specs/web-apps/current-work/#attr-script-src>|attribute's value is the empty string or if it could not be resolved,..."

Does this mean the error handler will be called in the case of 4XX, 5XX, and syntax errors?

jjb

Best regards
Mike Wilson

John J. Barton wrote:
To allow optional JavaScript download, some widely used JavaScript
libraries, such as jQuery and requireJS, use script elements added to
the document dynamically by JavaScript. (Of course this
feature is also
used by applications directly as well).   For normal deployment this
approach works well in practice. At development time however,
or in the
presence of network or server problems, the approach gives poor error
recovery information. Fundamentally the problem is that the insertion
mechanism has no error return path.

The script element does support one event, 'onload' which fires after
the script has finished loading. I suggest the addition of one new
event, 'onerror', which fires in every other case. For examples, a
network error (4XX, 5XX) or JavaScript parse error would
trigger onerror
but not onload.  On the other hand, a runtime error for the
outer-function of the script element would trigger onload (I
guess), but
the developer can handle this with try/catch.

Very long load times would still have poor error recovery
information,
but developers could implement UI to signal "loading..." once
they know
they will get some update event eventually.

jjb


Reply via email to