Contents
Scripts offer authors a means to extend HTML documents in highlyactive and interactive ways. For example:
There are two types of scripts authors may attach to an HTML document:
Note. This specification includes more detailedinformation about scripting in sections onscript macros.
The following sections discuss issues that concern user agents that supportscripting.
<!ELEMENTSCRIPT - -%Script; -- script statements --><!ATTLIST SCRIPTcharset%Charset; #IMPLIED -- char encoding of linked resource --type%ContentType; #REQUIRED -- content type of script language --src%URI; #IMPLIED -- URI for an external script --defer (defer) #IMPLIED -- UA may defer execution of script -- >
Start tag:required, End tag:required
Attribute definitions
Attributes defined elsewhere
TheSCRIPT element places a script within a document. This element mayappear any number of times in theHEAD orBODY of an HTML document.
The script may be defined within the contents of theSCRIPT element or in an external file. If thesrcattribute is not set, user agents must interpret the contents of the element asthe script. If thesrc has a URI value, user agents must ignore the element'scontents and retrieve the script via the URI. Note that thecharset attribute refers to thecharacterencoding of the script designated by thesrc attribute; it does notconcern the content of theSCRIPT element.
Scripts are evaluated byscript engines that must be known to auser agent.
Thesyntax of script data depends onthe scripting language.
As HTML does not rely on a specific scripting language, document authorsmust explicitly tell user agents the language of each script. This may be doneeither through a default declaration or a local declaration.
Authors should specify the default scripting language for all scripts in adocument by including the followingMETA declaration in theHEAD:
<META http-equiv="Content-Script-Type" content="type">
where "type" is acontent typenaming the scripting language. Examples of values include "text/tcl","text/javascript", "text/vbscript".
In the absence of aMETA declaration, the default can be set by a "Content-Script-Type"HTTP header.
Content-Script-Type: type
where "type" is again acontenttype naming the scripting language.
User agents should determine the default scripting language for a documentaccording to the following steps (highest to lowest priority):
Documents that do not specify default scripting language information andthat contain elements that specify anintrinsic eventscript are incorrect. User agents may still attempt to interpret incorrectlyspecified scripts but are not required to. Authoring tools should generatedefault scripting language information to help authors avoid creating incorrectdocuments.
Thetype attribute must be specified for eachSCRIPT element instance in a document. The value of thetype attribute for aSCRIPT element overrides the defaultscripting language for that element.
In this example, we declare the default scripting language to be "text/tcl".We include oneSCRIPT in the header, whose script is located in an externalfile and is in the scripting language "text/vbscript". We also include oneSCRIPT in the body, which contains its own scriptwritten in "text/javascript".
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"><HTML><HEAD><TITLE>A document with SCRIPT</TITLE><META http-equiv="Content-Script-Type" content="text/tcl"><SCRIPT type="text/vbscript" src="http://someplace.com/progs/vbcalc"></SCRIPT></HEAD><BODY><SCRIPT type="text/javascript">...some JavaScript...</SCRIPT></BODY></HTML>
Each scripting language has its own conventions for referring to HTMLobjects from within a script. This specification does not define a standardmechanism for referring to HTML objects.
However, scripts should refer to an element according to its assigned name.Scripting engines should observe the following precedence rules whenidentifying an element: aname attribute takes precedence overanid if both are set. Otherwise, one or the other may be used.
Note. Authors of HTML documents are advised thatchanges are likely to occur in the realm of intrinsic events (e.g., how scriptsare bound to events). Research in this realm is carried on by members of theW3C Document Object Model Working Group (see the W3C Web Site athttp://www.w3.org/ for more information).
Attribute definitions
It is possible to associate an action with a certain number of events thatoccur when a user interacts with a user agent. Each of the "intrinsic events"listed above takes a value that is a script. The script is executed wheneverthe event occurs for that element. Thesyntax of script data depends on the scripting language.
Control elements such asINPUT,SELECT,BUTTON,TEXTAREA, and
For instance, authors may want to include press buttons in their documentsthat do not submit a form but still communicate with a server when they areactivated.
The following examples show some possible control and user interfacebehavior based on intrinsic events.
In the following example, userName is a required text field. When a userattempts to leave the field, theonblur event calls a JavaScriptfunction to confirm that userName has an acceptable value.
<INPUT NAME="userName" onblur="validUserName(this.value)">
Here is another JavaScript example:
<INPUT NAME="num" onchange="if (!checkNum(this.value, 1, 10)) {this.focus();this.select();} else {thanks()}" VALUE="0">
Here is a VBScript example of an event handler for a text field:
<INPUT name="edit1" size="50"> <SCRIPT type="text/vbscript"> Sub edit1_changed() If edit1.value = "abc" Then button1.enabled = True Else button1.enabled = False End If End Sub </SCRIPT>
Here is the same example using Tcl:
<INPUT name="edit1" size="50"> <SCRIPT type="text/tcl"> proc edit1_changed {} { if {[edit value] == abc} { button1 enable 1 } else { button1 enable 0 } } edit1 onChange edit1_changed </SCRIPT>
Here is a JavaScript example for event binding within a script. First,here's a simple click handler:
<BUTTON type="button" name="mybutton" value="10"><SCRIPT type="text/javascript"> function my_onclick() { . . . } document.form.mybutton.onclick = my_onclick </SCRIPT> </BUTTON>
Here's a more interesting window handler:
<SCRIPT type="text/javascript"> function my_onload() { . . . } var win = window.open("some/other/URI") if (win) win.onload = my_onload</SCRIPT>
In Tcl this looks like:
<SCRIPT type="text/tcl"> proc my_onload {} { . . . } set win [window open "some/other/URI"] if {$win != ""} { $win onload my_onload } </SCRIPT>
Note that "document.write" or equivalent statements in intrinsic eventhandlers create and write to a new document rather than modifying the currentone.
The dynamic modification of a document may be modeled as follows:
HTML documents are constrained to conform to the HTML DTD both before andafter processing any
The following example illustrates how scripts may modify a documentdynamically. The following script:
<TITLE>Test Document</TITLE> <SCRIPT type="text/javascript"> document.write("<p><b>Hello World!<\/b>") </SCRIPT>
Has the same effect as this HTML markup:
<TITLE>Test Document</TITLE> <P><B>Hello World!</B>
The following sections discuss how authors may create documents that workfor user agents that don't support scripting.
<!ELEMENTNOSCRIPT - - (%block;)+ -- alternate content container for non script-based rendering --><!ATTLIST NOSCRIPT%attrs; --%coreattrs,%i18n,%events -- >
Start tag:required, End tag:required
TheNOSCRIPT element allows authors to provide alternate content when ascript is not executed. The content of aNOSCRIPT element should only berendered by a script-aware user agent in the following cases:User agents that do not support client-side scripts must render thiselement's contents.
In the following example, a user agent that executes theSCRIPTwill include some dynamically created data in the document. If the user agentdoesn't support scripts, the user may still retrieve the data through alink.
<SCRIPT type="text/tcl">...some Tcl script to insert data...</SCRIPT><NOSCRIPT> <P>Access the <A href="http://someplace.com/data">data.</A></NOSCRIPT>
User agents that don't recognize theSCRIPT element will likely renderthat element's contents as text. Some scripting engines, including those forlanguages JavaScript, VBScript, and Tcl allow the script statements to beenclosed in an SGML comment. User agents that don't recognize theSCRIPTelement will thus ignore the comment while smart scripting engines willunderstand that the script in comments should be executed.
Another solution to the problem is to keep scripts in external documents andrefer to them with the
Commenting scripts in JavaScript
The JavaScript engine allows the string "<!--" to occur at the start of aSCRIPT element, and ignores further characters until the end of the line.JavaScript interprets "//" as starting a comment extending to the end of thecurrent line. This is needed to hide the string "-->" from the JavaScriptparser.
<SCRIPT type="text/javascript"><!-- to hide script contents from old browsers function square(i) { document.write("The call passed ", i ," to the function.","<BR>") return i * i } document.write("The function returned ",square(5),".")// end hiding contents from old browsers --></SCRIPT>
Commenting scripts in VBScript
In VBScript, a single quote character causes the rest of the current line tobe treated as a comment. It can therefore be used to hide the string "-->"from VBScript, for instance:
<SCRIPT type="text/vbscript"> <!-- Sub foo() ... End Sub ' --> </SCRIPT>
Commenting scripts in TCL
In Tcl, the "#" character comments out the rest of the line:
<SCRIPT type="text/tcl"><!-- to hide script contents from old browsers proc square {i} { document write "The call passed $i to the function.<BR>" return [expr $i * $i] } document write "The function returned [square 5]."# end hiding contents from old browsers --></SCRIPT>
Note. Some browsers close comments on the first ">"character, so to hide script content from such browsers, you can transposeoperands for relational and shift operators (e.g., use "y < x" rather than"x > y") or use scripting language-dependent escapes for ">".