The issue has been address in the HTML spec as http://www.w3.org/Bugs/Public/show_bug.cgi?id=11977
On Mar 17, 2011, at 12:33 PM, Juriy Zaytsev wrote: > Thanks for bringing this quirk to the surface. I remember being puzzled by > the presence of this wording in HTML5 spec but never got a chance to do > anything about it. > > By "non-standard" I meant "not part of ECMA-262 standard" (not that it's not > part of any other standard, such as HTML5... which — to be precise — is not > yet a standard, as far as I understand). I changed the wording of the test to > make it clearer — http://kangax.github.com/es5-compat-table/strict-mode/ > > And while we're on this subject, I've been tinkering with compat. table of > non-standard ES features across various (modern and not so modern) > implementations — http://kangax.github.com/es5-compat-table/non-standard/ > > Might be useful in assessing the risk of dropping/introducing certain > extensions in future versions of ES. > > -- > kangax > > On Thu, Feb 3, 2011 at 5:00 PM, Allen Wirfs-Brock <al...@wirfs-brock.com> > wrote: > I was browsing Kangax's strict mode test result page > (http://kangax.github.com/es5-compat-table/strict-mode/ ) and I noticed that > he listed the recognition of a use strict directive of a event handler as a > "non-standard" feature that he tests for. This spiked my curiosity as my > recollection was the HTML5 event handler content attribute was specified to > be text that is an ECMAScript FunctionBody. FunctionBody may contain a > Directive Prologue that includes a use strict directive so, from an > ECMAScript perspective, there shouldn't be anything non-standard about a > strict mode event handler. > > To be sure, I checked the event handler section of the HTML5 spec > (http://dev.w3.org/html5/spec/Overview.html#event-handler-attributes) and to > my surprise I discovered that it specifies the creation of the handler > function in a manner that, at first glance, seems to explicitly cause the > presence of a use strict directive to be ignored. Essentially it seems to > specify that event handlers specified using the event handler attribute are > never executed in ECMAScript 5 strict mode. I don't know whether or not this > was intentional, but it certainly seems wrong. The "strictness" of an > ECMAScript function is an internal and local characteristic of the function. > For a ECMAScript host to say that a use strict directive is ignored is really > no different from saying that IfStatements or any other syntactically valid > element of a FunctionBody will be ignored. > > The HTML5 spec. get into this trouble because of the way it uses the abstract > operation for creating function objects defined by section 13.2 of the ES5 > specification > (http://www.ecma-international.org/publications/standards/Ecma-262.htm). In > step 2 of the algorithm in HTML5 6.1.6.1 it unconditionally uses False as the > Strict parameter to the ES5 13.2 algorithm. That might seem to exclude the > function from strict mode, however that isn't actually the case. All the > Strict parameter to 13.2 controls is whether or not "poison-pill" properties > for 'caller' and 'arguments' are created for the function object. The > semantics of strict mode are specified throughout the ES5 specification and > are control by the actual lexical occurrence of a use strict directive. The > Strict parameter to 13.2 does not alter this semantics. > > The HTML5 spec. also contains another related bug. Step three says "If the > previous steps failed to compile the script, then ..." where the "previous > steps" pretty clearly references the use of ES5 13.2 in the immediately > preceding step 2. However, there is nothing in ES5 13.2 that concerns the > compilation of ECMAScript source text. Instead 13.2 expects to be passed an > valid FunctionBody. That validation ("compilation") must occur somewhere else. > > It appears to me that these problem are probably the result of the HTML5 > algorithm being patterned after the wrong parts of the ES5 spec. The > appropriate part of the ES5 spec. to use as a model is steps 8-11 of ES5 > 15.3.2.1. This is the definition of the Function constructor. These steps > correctly take care of parsing the FunctionBody and handling any resulting > syntax errors. It also calls 13.2 with a correct Strict parameter. Replacing > HTML5 6.1.6.1 steps 2-3 with steps modeled after ES5 15.3.2.1 steps, 8, 9, > and 11 (step 10 is not applicable) should correct these issues. > > Finally, Kangax also lists as a "non-standard" feature the recognition of > strict coder as the string argument to setTimeout. I couldn't find anything > the HTML5 spec. that could be interpreted as excluding strict ECMAScript > code in this context. > > Allen >
_______________________________________________ es-discuss mailing list es-discuss@mozilla.org https://mail.mozilla.org/listinfo/es-discuss