<script> for non-script content

http://quickstarts.asp.net/Futures/ajax/doc/components.aspx uses
   <script type="text/xml-script">
for embedding XML which gets interpreted by some other JavaScript code. 
No UA could ever process that XML natively like a proper script, since 
it would conflict with the JS's handling of the XML.

http://people.mozilla.com/~vladimir/canvas3d/examples/simple/simple20.html 
uses
   <script ... type="x-shader/x-fragment">
for embedding OpenGL shader programs. It would never make sense for a 
browser to execute the code directly, since it only works in the context 
of a complete OpenGL environment.

http://lists.w3.org/Archives/Public/public-html/2007Dec/0238.html says 
"we use the <script> tag with a Backbase MIME type" as a container for XML.


But http://www.w3.org/html/wg/html5/#script just says "The script 
element allows authors to include dynamic script in their documents", 
and does not acknowledge the use of <script> as a non-executable 
container for text which has an associated MIME type and can be read by 
other scripts.


Since this is something that people want to do, we should suggest a 
proper way to do it. XHTML makes it fairly easy, but it's harder for the 
HTML serialisation. I think the main requirements are:
(1) Works in current / recent web browsers.
(2) Does not require escaping of the content (else it's ugly and hard to 
edit when writing HTML by hand).
(3) Does not impose any restrictions on the content.
(4) Does not get rendered by web browsers.
(5) Does not require complex scripting magic to extract the content as a 
string.

<xmp> is not perfect for (1), since Opera 9.2 has parser bugs that make 
it not work. It is not perfect for (4), since you need to say "xmp { 
display: none }" instead of it working by default.

<xmp> and <script> are not perfect for (3), since they don't allow the 
content to contain the strings '</xmp' or '</script'.

Any new element is useless for (1) or for (2) or for (5), since it won't 
work sensibly in all significant current browsers.

I don't know of any other sensible solutions for this problem. <script> 
fulfils most of the requirements, and the one it fails is not a critical 
issue since most content will not try containing '</script>' and almost 
all embedded content types will have some kind of equivalent (e.g. 
programming languages with '"<\/script>"' or XML with '<foo:script 
xmlns:foo="">...</foo:script>').


In the absence of a better solution, and in the interest of paving the 
cowpath (i.e. adopting people's current solution to the problem), 
<script> should be accepted for this use, and defined like:

   "The script element allows authors to include dynamic script in their 
documents.

    It may also be used to embed arbitrary textual data in the document 
when user agents are not expected to execute that data, for example to 
be processed by another script. In this case, the type attribute must be 
present and set to a MIME type for which user agents probably won't ever 
implement support. [That last sentence is rubbish, but something similar 
should be said.] XHTML documents should not use the script element in 
this way, as techniques such as namespaces and CDATA sections allow 
better solutions."

-- 
Philip Taylor
pjt47@cam.ac.uk

Received on Friday, 21 December 2007 22:10:07 UTC