Índice
Un script (ou "guión") do lado do cliente é un programa que pode acompañar un documento HTML ou ir incrustado directamente nel. O programa corre na máquina cliente ao se carregar o documento ou noutro momento, como cando se activa un vínculo. Que a HTML aceite scripts é independente da linguaxe de script.
Os scripts oferecen-lles aos autores unha maneira de extender os documentos HTML en modos moi activos e interactivos. Por exemplo:
Hai dous tipos de scripts que os autores poden xuntar a un documento HTML:
Nota. Esta especificación inclui información máis detallada sobre os scripts nas seccións sobre macros de script .
As seccións que seguen tratan cuestións concernentes aos axentes de usuário que aceitan scripst.
<!ELEMENT SCRIPT - - %Script; -- declaracións de script -->
<!ATTLIST SCRIPT
charset %Charset; #IMPLIED -- codificación de caracters do recurso vinculado --
type %ContentType; #REQUIRED -- tipo de conteúdos da linguaxe de script --
src %URI; #IMPLIED -- URI dun script externo --
defer (defer) #IMPLIED -- O axente de usuário pode demorar a execución dun script --
>
Etiqueta inicial: requerida, Etiqueta final: requerida
Definicións dos atributos
Atributos que se definen noutro sítio
O elemento SCRIPT situa un script dentro dun documento. Este elemento pode aparecer várias veces no HEAD ("cabezallo") ou no BODY ("corpo") dun documento HTML.
O script pode-se definir cos conteúdos do elemento SCRIPT ou nun ficheiro externo. Se non se inclue o atributo src , os axentes de usuário deben interpretar os conteúdos do elemento como script. Se src ten un valor de URI, os axentes de usuário deben ignorar os conteúdos do elemento e recuperar o script por meio do URI. Observe-se que o atributo charset refere-se à codificación de caracteres do script designado polo atributo src ; non lle concerne ao conteúdo do elemento SCRIPT .
Os scripts avalian-se con motores de script que o axente de usuário debe coñecer.
A sintaxe dos dados de script depende da linguaxe do script.
Dado que a HTML non depende dunha linguaxe de script concreta, os autores de documentos deben-lles indicar a linguaxe de cada script explicitamente aos axentes de usuário. Pode-se facer isto tanto mediante unha declaración por omisión ou mediante unha declaración local.
Os autores deberian especificar a linguaxe de script por omisión de todos os scripts dun documento incluindo a seguinte declaración META no HEAD :
<META http-equiv="Content-Script-Type" content="type">
na que "type" é un tipo de conteúdo co nome da linguaxe de script. Alguns exemplos de valores incluen "text/tcl", "text/javascript", "text/vbscript".
Na auséncia dunha declaración META o valor por omisión pode-se asignar cun cabezallo "Content-Script-Type" de HTTP.
Content-Script-Type: type
no que "type" é, outra vez, un tipo de conteúdo co nome da linguaxe de script.
Os axentes de usuário deberian determinar a linguaxe de script por omisión dun documento dacordo cos pasos seguintes (de maior a menor prioridade):
Os documentos que non especifiquen a información da linguaxe de script por omisión e que conteñan elementos que especifican un script evento intrínseco son incorrectos. Os axentes de usuário poden, ainda asi, tentar interpretaren scripts especificados incorrectamentes, mais non se lles esixe. As ferramentas de creación deberian xerar información de linguaxe de script por omisión para axudar-lles aos autores a evitar crear documentos incorrectos.
Hai que indicar o atributo type para cada aparición do elemento SCRIPT nun documento. O valor do atributo do atributo type dun elemento SCRIPT substitui a linguaxe de script por omisión dese elemento.
Neste exemplo, declaramos que a linguaxe de script por omisión é "text/tcl". Incluímos un SCRIPT no cabezallo, cuxo scrip se localiza nun ficheiro externo e está na linguaxe de script "text/vbscript". Tamén incluímos un SCRIPT no corpo que contén o seu próprio script escrito en "text/javascript".
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<HTML>
<HEAD>
<TITLE>Un documento SCRIPT</TITLE>
<META http-equiv="Content-Script-Type" content="text/tcl">
<SCRIPT type="text/vbscript" src="http://unsitio.com/progs/vbcalc">
</SCRIPT>
</HEAD>
<BODY>
<SCRIPT type="text/javascript">
...código JavaScript... </SCRIPT> </BODY> </HTML>
Cada linguaxe de script usa as suas próprias convencións para se referir aos obxectos HTML desde o interior do script. Esta especificación non define un mecanismo padrón para se referir a obxectos HTML.
Porén, os scripts deberian-se referir a un elemento dacordo co seu nome asignado. Os motores de script deberian observar as seguintes regras de precedéncia ao identificar un elemento: un atributo name ten precedéncia sobre un id se apareceren os dous. De non ser asi poden-se usar tanto o un como o outro.
Nota. Recomenda-se-lles aos autores de documentos HTML que probabelmente haberá alteracións no mundo dos acontecimentos intrínsecos (p.ex., como se ligan os scripts aos acontecimentos). A investigación neste ámbito está a ser realizada por membros do Grupo de traballo do W3C en Modelos de obxecto documento (ver o sítio do W3C en http://www.w3.org/ para máis información).
Definicións dos atributos
É posíbel asociar unha acción cun certo número de eventos que acontecen cando un usuário interacciona cun axente de usuário. Cada un dos "acontecimentos intrínsecos" listados arriba toma un valor que é un script. O script executa-se sempre que o evento acontece para ese elemento. A sintaxe dos dados de script depende da linguaxe do script.
Os elementos de control como INPUT , SELECT , BUTTON , TEXTAREA , e LABEL respostan todos eles a determinados acontecimentos intrínsecos. Cando estes elementos non aparecen dentro dun formulário, poden-se usar para aumentar a interface gráfica de usuário do documento.
Por exemplo, os autores poden querer incluir botóns nos seus documentos que non envien un documento mais que se comuniquen cun servidor ao seren activados.
Os exemplos que seguen mostran comportamentos de control e interface de usuário posíbeis baseados en acontecimentos intrínsecos.
No exemplo seguinte, nomeUsuario é un campo de texto necesário. Cando un usuário tenta deixar o campo, o evento onblur chama unha función JavaScript para confirmar que nomeUsuario ten un valor aceitábel.
<INPUT NAME="nomeUsuario" onblur="nomeUsuarioValido(this.value)">
Velaqui outro exemplo JavaScript:
<INPUT NAME="num"
onchange="if (!checkNum(this.value, 1, 10))
{this.focus();this.select();} else {thanks()}"
VALUE="0">
Velaqui un exemplo en VBScript dun manipulador de eventos para un campo de texto:
<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>
Velaqui un exemplo que usa 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>
Velaqui un exemplo en JavaScript dunha ligazón de evento dentro dun script. Primeiro, un manipulador de eventos simples:
<BUTTON type="button" name="omeuboton" value="10">
<SCRIPT type="text/javascript">
function omeu_onclick() {
. . .
}
document.form.omeuboton.onclick = omeu_onclick
</SCRIPT>
</BUTTON>
Velaqui un manipulador de xanelas máis interesante:
<SCRIPT type="text/javascript">
function omeu_onload() {
. . .
}
var win = window.open("some/other/URI")
if (win) win.onload = omeu_onload
</SCRIPT>
En Tcl é asi:
<SCRIPT type="text/tcl">
proc omeu_onload {} {
. . .
}
set win [window open "some/other/URI"]
if {$win != ""} {
$win onload omeu_onload
}
</SCRIPT>
Observe-se que "document.write" ou outras declaracións equivalentes en manipuladores de eventos intrínsecos crean e escreben nun documento novo en vez de modificaren o actual.
A modificación dinámica dun documento pode-se modelar como segue:
Os documentos HTML están forzados a seren conformes co DTD de HTML tanto antes como depóis de procesaren caisquer elementos SCRIPT .
O exemplo seguinte ilustra como poden os scripts modificaren un documento dinamicamente. O script seguinte:
<TITLE>Documento de proba</TITLE>
<SCRIPT type="text/javascript">
document.write("<p><b>Olá Mundo!<\/b>")
</SCRIPT>
Ten o mesmo que este código HTML:
<TITLE>Documento de proba</TITLE>
<P><B>Olá Mundo!</B>
A sección seguinte trata de como os autores poden crear documentos que funcionen para axetnes que non aceiten scripts.
<!ELEMENT NOSCRIPT - - (%block;)+
-- contentor de conteúdo alternativo para representación non baseada en scripts -->
<!ATTLIST NOSCRIPT
%attrs; -- %coreattrs, %i18n, %events --
>
Etiqueta inicial: requerida, Etiqueta final: requerida
O elemento NOSCRIPT permite que os autores fornezan conteúdo alternativo cando non se executa un elemento. O conteúdo dun elemento NOSCRIPT deberia ser mostrado por un axente que coñeza os scripts só nos seguintes casos:Os axentes de usuário que non aceitan scripts do lado do cliente deben mostrar os conteúdos deste elemento.
No exemplo seguinte, un axente de usuário que execute o SCRIPT incluirá no documento alguns dados creados dinamicamente. Ainda que o axente de usuário non aceite scripts, o usuário pode recuperar os dados por meio dun vínculo.
<SCRIPT type="text/tcl">
...script en Tcl para inserir dados ... </SCRIPT> <NOSCRIPT> <P>Consulte os <A href="http://unsitio.com/dados">dados.</A> </NOSCRIPT>
Os axentes de usuário que non recoñecen o elemento SCRIPT probabelmente representarán como texto os conteúdos dese elemento. Alguns motores de script, incluídos os das linguaxes JavaScript, VBScript, e Tcl permiten encerrar as declaracións do script nun comentário Asi, os axentes de usuário que non recoñecen o elemento SCRIPT ignorarán o comentário mentres que os motores de script que o saiban comprenderán que deberán correr o script que está como comentário.
Outra solución ao problema é manter os scripts en documentos externos e referir-se a eles co atributo src .
Comentários dentro dos scripts en JavaScript
O motor de JavaScript permite que apareza a secuéncia "<!--"
ao comezo dun elemento SCRIPT e ignora os demáis caracteres
até ao final da liña. JavaScript interpreta "//" como
que inícia un comentário que se extende até ao
final da liña actual. Isto é necesário para esconder
a secuéncia "-->" do procesador de JavaScript.
<SCRIPT type="text/javascript">
<!-- para esconder os conteúdos do script de browsers antigos
function square(i) {
document.write("A chamada pasada", i ," à función.","<BR>")
return i * i
}
document.write("A función deu ",square(5),".")
// remata de esconder os conteúdos de browsers antigos -->
</SCRIPT>
Comentários dentro dos scripts en VBScript
En VBScript, un carácter de aspas simples fai que o resto da
liña actual se trate como un documento. Pode, polo tanto, usar-se
para esconder a secuéncia "-->" de VBScript, por exemplo:
<SCRIPT type="text/vbscript">
<!--
Sub oquesexa()
...
End Sub
' -->
</SCRIPT>
Comentários dentro dos scripts en TCL
En Tcl, o carácter "#" fai un comentário do resto da
liña:
<SCRIPT type="text/tcl">
<!-- para esconder os conteúdos do script de browsers antigos
proc square {i} {
document write "A chamada pasada $i à función.<BR>"
return [expr $i * $i]
}
document write "A función deu [square 5]."
# remata de esconder os conteúdos de browsers antigos -->
</SCRIPT>
Nota. Alguns navegadores fechan os comentários co primeiro carácter ">", asi que para esconder o conteúdo do script deses browsers, poden-se transpor operandos para operadores relacionais e de cámbio (p.ex.: use "y<x" en vez de "x>y") ou use escapes dependentes da linguaxe de script para ">".