18 ScriptsContents 18.1 Introduction to scriptsA client-side script is a program that may accompany an HTML document or be embedded directly in it. The program executes on the client's machine when the document loads, or at some other time such as when a link is activated. HTML's support for scripts is independent of the scripting language.Scripts offer authors a means to extend HTML documents in highly active and interactive ways. For example:
There are two types of scripts authors may attach to an HTML document:
Note. This specification includes more detailed information about scripting in sections on script macros. 18.2 Designing documents for user agents that support scriptingThe following sections discuss issues that concern user agents that support scripting. 18.2.1 The SCRIPT element<!ELEMENT SCRIPT - - %Script; -- script statements --> <!ATTLIST SCRIPT charset %Charset; #IMPLIED -- char encoding of linked resource -- type %ContentType; #REQUIRED -- content type of script language -- language CDATA #IMPLIED -- predefined script language name -- 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
The SCRIPT element places a script within a document. This element may appear any number of times in the HEAD or BODY of an HTML document. The script may be defined within the contents of the SCRIPT element or in an external file. If the src attribute is not set, user agents must interpret the contents of the element as the script. If the src has a URI value, user agents must ignore the element's contents and retrieve the script via the URI. Note that the charset attribute refers to the character encoding of the script designated by the src attribute; it does not concern the content of the SCRIPT element. Scripts are evaluated by script engines that must be known to a user agent. The syntax of script data depends on the scripting language. 18.2.2 Specifying the scripting languageAs HTML does not rely on a specific scripting language, document authors must explicitly tell user agents the language of each script. This may be done either through a default declaration or a local declaration. The default scripting languageAuthors should specify the default scripting language for all scripts in a document by including the following META declaration in the HEAD: <META http-equiv="Content-Script-Type" content="type"> where "type" is an content type naming the scripting language. Examples of values include "text/tcl", "text/javascript", "text/vbscript". In the absence of a META declaration, the default can be set by a "Content-Script-Type" HTTP header. Content-Script-Type: type where "type" is again an content type naming the scripting language. User agents should determine the default scripting language for a document according to the following steps (highest to lowest priority):
Documents that do not specify a default scripting language information and that contain elements that specify an intrinsic event script are incorrect. User agents may still attempt to interpret incorrectly specified scripts but are not required to. Authoring tools should generate default scripting language information to help authors avoid creating incorrect documents. Local declaration of a scripting languageIt is also possible to specify the scripting language in each SCRIPT element via the type attribute. In the absence of a default scripting language specification, this attribute must be set on each SCRIPT element. When a default scripting language has been specified, the type attribute overrides it. In this example, we declare the default scripting language to be "text/tcl". We include one SCRIPT in the header, whose script is located in an external file and is in the scripting language "text/vbscript". We also include one SCRIPT in the body, which contains its own script written in "text/javascript". <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/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> References to HTML elements from a scriptEach scripting language has its own conventions for referring to HTML objects from within a script. This specification does not define a standard mechanism 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 when identifying an element: a name attribute takes precedence over a id if both are set. Otherwise, one or the other may be used. 18.2.3 Intrinsic eventsNote. Authors of HTML documents are advised that changes are likely to occur in realm of intrinsic events (e.g., how scripts are bound to events). Research in this realm is carried on by members of the W3C Document Object Model Working Group (see the W3C Web Site at http://www.w3.org/ for more information). Attribute definitions
It is possible to associate an action with a certain number of events that occur 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 whenever the event occurs for that element. The syntax of script data depends on the scripting language. Control elements such as INPUT, SELECT, BUTTON, TEXTAREA, and LABEL all respond to certain intrinsic events. When these elements do not appear within a form, they may be used to augment the graphical user interface of the document. For instance, authors may want to include press buttons in their documents that do not submit a form but still communicate with a server when they are activated. The following examples show some possible control and user interface behavior based on intrinsic events. In the following example, userName is a required text field. When a user attempts to leave the field, the onblur event calls a JavaScript function 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 event handlers create and write to a new document rather than modifying the current one. 18.2.4 Dynamic modification of documentsScripts that are executed when a document is loaded may be able to modify the document's contents dynamically. The ability to do so depends on the scripting language itself (e.g., the "document.write" statement in the HTML object model supported by some vendors).The dynamic modification of a document may be modeled as follows:
HTML documents are constrained to conform to the HTML DTD both before and after processing any SCRIPT elements. The following example illustrates how scripts may modify a document dynamically. 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> 18.3 Designing documents for user agents that don't support scriptingThe following sections discuss how authors may create documents that work for user agents that don't support scripting. 18.3.1 The NOSCRIPT element<!ELEMENT NOSCRIPT - - (%block;)+ -- alternate content container for non script-based rendering --> <!ATTLIST NOSCRIPT %attrs; -- %coreattrs, %i18n, %events -- > Start tag: required, End tag: required The NOSCRIPT element allows authors to provide alternate content when a script is not executed. The content of a NOSCRIPT element should only rendered by a script-aware user agent in the following cases:
User agents that do not support client-side scripts must render this element's contents. In the following example, a user agent that executes the SCRIPT will include some dynamically created data in the document. If the user agent doesn't support scripts, the user may still retrieve the data through a link. <SCRIPT type="text/tcl"> ...some Tcl script to insert data... </SCRIPT> <NOSCRIPT> <P>Access the <A href="http://someplace.com/data">data.</A> </NOSCRIPT> 18.3.2 Hiding script data from user agentsUser agents that don't recognize the SCRIPT element will likely render that element's contents as text. Some scripting engines, including those for languages JavaScript, VBScript, and Tcl allow the script statements to be enclosed in an SGML comment. User agents that don't recognize the SCRIPT element will thus ignore the comment while smart scripting engines will understand that the script in comments should be executed. Another solution to the problem is to keep scripts in external documents and refer to them with the src attribute. Commenting scripts in JavaScript <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 <SCRIPT type="text/vbscript"> <!-- Sub foo() ... End Sub ' --> </SCRIPT> Commenting scripts in TCL <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 transpose operands for relational and shift operators (e.g., use "y < x" rather than "x > y") or use scripting language-dependent escapes for ">". |
Copyright (c) 1999. Designed by Ji , Seong - Il, All rights Reserved. Since 15. Mar 1998 | Last Modified 20. Mar 1999 |