Movatterモバイル変換


[0]ホーム

URL:


 anterior siguiente contenidos elementos atributos índice

18Scripts

Nota: Este documento es parte de una traducción al castellano de la Recomendación del W3C "HTML 4.01 Specification" (más información). Puede consultar laversión original del mismo. Para cualquier comentario o corrección acerca de la traducción póngase en contacto con el traductor en jrpozoarroba conclase punto net. Gracias por su colaboración.

Véase elAviso de copyright de la traducción.

Contenidos

  1. Introducción a los scripts
  2. Diseño de documentos para agentes de usuarioque soporten scripts
    1. El elementoSCRIPT
    2. Especificación del lenguaje de scripts
    3. Eventos intrínsecos
    4. Modificación dinámica de documentos
  3. Diseño de documentos para agentes de usuario queno soporten scripts
    1. El elementoNOSCRIPT
    2. Ocultar datos de scripts a los agentes de usuario

18.1Introducción a losscripts

Unscript en el lado del cliente es un programa que puedeacompañar a un documento HTML o que puede estar incluido en él. El programase ejecuta en la máquina del cliente cuando se carga el documento, o enalgún otro instante, como por ejemplo cuando se activa un vínculo. El soportede scripts de HTML es independiente del lenguaje de scripts.

Los scripts ofrecen a los autores la posibilidad de extender losdocumentos HTML de maneras activas e interactivas. Por ejemplo:

Hay dos tipos de scripts que los autores pueden asociar a un documentoHTML:

Nota. Esta especificación incluye información más detalladasobre scripts en la sección sobremacros de scripts.

18.2 Diseño de documentos para agentes de usuario quesoporten scripts

Las siguientes secciones tratan sobre cuestiones que afectan a los agentesde usuario que soportan scripts.

18.2.1 El elementoSCRIPT

<!ELEMENTSCRIPT - -%Script;          -- sentencias de script --><!ATTLIST SCRIPTcharset%Charset;      #IMPLIED  -- codif. de caracteres del recurso vinculado--type%ContentType;  #REQUIRED -- tipo de contenido del lenguaje de scripts --src%URI;          #IMPLIED  -- URI del script externo --defer       (defer)        #IMPLIED  -- El AU puede retrasar la ejecución  --  >

Etiqueta inicial:obligatoria, Etiqueta final:obligatoria

Definiciones de atributos

src =uri[CT]
Este atributo especifica la localización de un script externo.
type =tipo de contenido[CI]
Este atributo especifica el lenguaje de scripts de los contenidos delelemento y prevalece sobre el lenguaje de scripts por defecto. El lenguajede scripts se especifica como un tipo de contenido (p.ej., "text/javascript").Los autores deben proporcionar un valor para este atributo. No hay valorpor defecto para este atributo.
language =cdata[CI]
Desaprobado. Esteatributo especifica el lenguaje de scripts de los contenidos de este elemento.Su valor es un identificador del lenguaje, pero debido a que estos identificadoresno son estándar, este atributo ha sidodesaprobado en favor detype.
defer[CI]
Si está establecido, este atributo booleano indica al agente de usuario queel script no va a generar ningún contenido en el documento (p.ej., en javascript,cuando no hubiera ningún "document.write") y por lo tanto el agente de usuariopuede seguir analizando y representando.

Atributos definidos en otros lugares

El elementoSCRIPT coloca un script dentro de un documento. Este elemento puedeaparecer cualquier número de veces en elHEAD o en elBODY de un documento HTML.

El script puede estar definido dentro de los contenidos del elementoSCRIPT o en un fichero externo. Si el atributosrcno está establecido, los agentes de usuario deben interpretar que los contenidosdel elemento son el script. Sisrc tiene un valor URI, los agentes de usuario no deben teneren cuenta los contenidos del elemento y deben obtener el script mediante el URI.Obsérvese que el atributocharset se refiere a lacodificación decaracteres del script designado por el atributosrc; no afecta alcontenido del elementoSCRIPT.

Los scripts son evaluados pormotores de scripts, con los cualesdeben poder comunicarse los agentes de usuario.

Lasintaxis de los datos de scripts dependedel lenguaje de scripts.

18.2.2Especificación del lenguaje de scripts

Al no estar ligado el HTML a un lenguaje de scripts específico, losautores de los documentos deben decir explícitamente a los agentes de usuarioel lenguaje de cada script. Esto puede hacerse o bien mediante una declaraciónpor defecto o bien mediante una declaración local.

El lenguaje de scriptspor defecto 

Los autores deberían especificar el lenguaje de scripts por defectode todos los scripts de un documento incluyendo la siguiente declaraciónMETA en elHEAD:

<META http-equiv="Content-Script-Type" content="type">

donde "type" es untipo de contenidoque se refiere al lenguaje de scripts. Como ejemplos de este valor tenemos "text/tcl","text/javascript", "text/vbscript".

En ausencia de una declaraciónMETA, el valor por defecto puede ser establecido con unencabezado HTTP "Content-Script-Type".

    Content-Script-Type: type

donde "type" es nuevamente untipode contenido que se refiere al lenguaje de scripts.

Los agentes de usuario deberían determinar el lenguaje de scriptspor defecto de un documento de acuerdo con los siguiente pasos (ordenadosde prioridad más alta a más baja):

  1. Si alguna declaraciónMETA especifica el "Content-Script-Type",la última de ellas en el flujo de caracteres determina el lenguaje descripts por defecto.
  2. En caso contrario, si algún encabezado HTTP especifica el "Content-Script-Type",el último de ellos en el flujo de caracteres determina el lenguaje descripts por defecto.

Los documentos que no especifiquen información relativa al lenguaje descripts por defecto y que contengan elementos que especifiquen un scriptdeevento intrínseco son incorrectos. Los agentes de usuarioaún pueden intentar interpretar scripts especificados incorrectamente, pero nose requiere que lo hagan. Las herramientas de creación deberían generar informaciónsobre el lenguaje de scripts por defecto para ayudar a que los autores evitenla creación de documentos incorrectos.

Declaración local del lenguaje de un script 

Se debe especificar el atributotypede todos los elementosSCRIPT de un documento. El valor del atributotype de un elementoSCRIPT prevalece sobre el languajede scripts por defecto de ese elemento.

En este ejemplo, declaramos que el lenguaje de scripts por defecto es"text/tcl". Incluimos unSCRIPT en la cabecera, cuyo script se localiza en un ficheroexterno y que está en el lenguaje de scripts "text/vbscript". También incluimosunSCRIPT en el cuerpo, que contiene su propioscript 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 con SCRIPT</TITLE><META http-equiv="Content-Script-Type" content="text/tcl"><SCRIPT type="text/vbscript" src="http://algunsitio.com/progs/vbcalc"></SCRIPT></HEAD><BODY><SCRIPT type="text/javascript">...algo en JavaScript...</SCRIPT></BODY></HTML>

Referencias aelementos HTML desde un script 

Cada lenguaje de scripts tiene sus propias convenciones para referirsea objetos HTML desde dentro del script. Esta especificación no defineun mecanismo estándar para referirse a objetos HTML.

Sin embargo, los scripts deberían hacer referencia a un elementode acuerdo con su nombre asignado. Los motores de scripts deberían seguirlas siguientes reglas de precedencia cuando identifiquen un elemento:un atributoname prevalece sobre un atributoid si ambos están establecidos. En caso contrario, se puede usaruno u otro.

18.2.3Eventos intrínsecos

Nota. Se avisa a los autores de documentos HTML quese espera que haya cambios en el ámbito de los eventos intrínsecos (p.ej.,cómo se ligan los scripts a los eventos). La investigación en este campo estásiendo llevada a cabo por miembros del Grupo de Trabajo del Modelo de Objetosdel Documento del W3C (ver el sitio web del W3C enhttp://www.w3.org/ para más información).

Definiciones de atributos

onload =script[CT]
El eventoonload ocurre cuando el agente de usuario finalizala carga de una ventana o de todos los marcos de unFRAMESET. Este atributo puedeutilizarse con los elementosBODY yFRAMESET.
onunload =script[CT]
El eventoonunload ocurre cuando el agente de usuario eliminaun documento de una ventana o marco. Este atributo puede utilizarse con loselementosBODY yFRAMESET.
onclick =script[CT]
El eventoonclick ocurre cuando se hace clic con el dispositivo apuntadorsobre un elemento. Este atributo puede utilizarse con la mayoría de loselementos.
ondblclick =script[CT]
El eventoondblclick ocurre cuando se hace doble clic con el dispositivo apuntadorsobre un elemento. Este atributo puede utilizarse con la mayoríade los elementos.
onmousedown =script[CT]
El eventoonmousedown ocurre cuando el botón del dispositivoapuntador se pulsa cuando está encima de un elemento. Este atributo puedeutilizarse con la mayoría de los elementos.
onmouseup =script[CT]
El eventoonmouseup ocurre cuando el botón del dispositivoapuntador se suelta cuando está encima de un elemento. Este atributo puedeutilizarse con la mayoría de los elementos.
onmouseover =script[CT]
El eventoonmouseover ocurre cuando el dispositivo apuntadorse sitúa sobre un elemento. Este atributo puede utilizarse con la mayoríade los elementos.
onmousemove =script[CT]
El eventoonmousemove ocurre cuando el dispositivo apuntadorse mueve mientras está sobre un elemento. Este atributo puede utilizarse conla mayoría de los elementos.
onmouseout =script[CT]
El eventoonmouseout ocurre cuando el dispositivo apuntadorse aparta de un elemento. Este atributo puede utilizarse con la mayoríade los elementos.
onfocus =script[CT]
El eventoonfocus ocurre cuando el foco se dirige hacia un elemento, ya sea conel dispositivo apuntador o por navegación con tabulador. Este atributo puedeutilizarse con los siguientes elementos:A,AREA,LABEL,INPUT,SELECT,TEXTAREA yBUTTON.
onblur =script[CT]
El eventoonblur ocurre cuando el elemento pierde el focoya sea con el dispositivo apuntador o por navegación con tabulador. Puedeutilizarse con los mismos elementos queonfocus.
onkeypress =script[CT]
El eventoonkeypress ocurre cuando se pulsa y se sueltauna tecla encima de un elemento. Este atributo puede utilizarse con la mayoríade los elementos.
onkeydown =script[CT]
El eventoonkeydown ocurre cuando se pulsa una tecla encima deun elemento. Este atributo puede utilizarse con la mayoría de los elementos.
onkeyup =script[CT]
El eventoonkeyup ocurre cuando una tecla se suelta encima deun elemento. Este atributo puede utilizarse con la mayoría de los elementos.
onsubmit =script[CT]
El eventoonsubmit ocurre cuando se envía un formulario. Sólose aplica al elementoFORM.
onreset =script[CT]
El eventoonreset ocurre cuando se reinicializa un formulario. Sólose aplica al elementoFORM.
onselect =script[CT]
El eventoonselect ocurre cuando un usuario selecciona texto deun campo de texto. Este atributo puede utilizarse con los elementosINPUT yTEXTAREA.
onchange =script[CT]
El eventoonchange ocurre cuando un control pierde el focode entraday su valor ha sido modificado después de que el focose dirigió hacia él. Este atributo se aplica a los siguientes elementos:INPUT,SELECT yTEXTAREA.

Es posible asociar una acción con un cierto número de eventos queocurren cuando un usuario interacciona con un agente de usuario. Cada unode los "eventos intrínsecos" recién enumerados toma como valor un script.El script se ejecuta cada vez que el evento ocurre para ese elemento. Lasintaxis de los datos del scriptdepende del lenguaje de scripts.

Los elementos de control tales comoINPUT,SELECT,BUTTON,TEXTAREA yLABEL responden todos a ciertos eventos intrínsecos.Cuando estos elementos no aparecen dentro de un formulario, se pueden emplearpara enriquecer la interfaz gráfica del usuario del documento.

Por ejemplo, los autores pueden querer incluir botones en sus documentosque no envíen un formulario pero que puedan comunicarse con un servidor cuandoson activados.

Los siguientes ejemplos muestran posibles comportamientos de controlese interfaces de usuario basados en eventos intrínsecos.

En el siguiente ejemplo,nombreUsuario es un campo de texto obligatorio.Cuando un usuario intenta abandonar el campo, el eventoonblurllama a una función JavaScript para confirmar que nombreUsuario tiene unvalor aceptable.

<INPUT NAME="nombreUsuario" onblur="validarNombreUsuario(this.value)">

Aquí tenemos otro ejemplo en #"num" onchange="if (!checkNum(this.value, 1, 10)) {this.focus();this.select();} else {thanks()}" VALUE="0">

Aquí tenemos un ejemplo en VBScript de un manejador de eventospara un campo de texto:

    <INPUT name="edit1" size="50">        <SCRIPT type="text/vbscript">      Sub edit1_cambiado()        If edit1.value = "abc" Then          button1.enabled = True        Else          button1.enabled = False        End If      End Sub    </SCRIPT>

Aquí tenemos el mismo ejemplo usando Tcl:

    <INPUT name="edit1" size="50">    <SCRIPT type="text/tcl">      proc edit1_cambiado {} {        if {[edit value] == abc} {          button1 enable 1        } else {          button1 enable 0        }      }      edit1 onChange edit1_cambiado    </SCRIPT>

Aquí tenemos un ejemplo en JavaScript que asocia un evento con un script.En primer lugar vemos un manejador sencillo de clics:

    <BUTTON type="button" name="miboton" value="10"><SCRIPT type="text/javascript">      function mi_onclick() {         . . .      }    document.form.miboton.onclick = mi_onclick </SCRIPT> </BUTTON>

Aquí tenemos un manejador de ventanas más interesante:

    <SCRIPT type="text/javascript">      function mi_onload() {         . . .      }      var ventana = window.open("algun/otro/URI")      if (ventana) ventana.onload = mi_onload</SCRIPT>

En Tcl esto sería algo así:

 <SCRIPT type="text/tcl">     proc mi_onload {} {       . . .     }     set ventana [window open "algun/otro/URI"]     if {$ventana != ""} {         $ventana onload mi_onload     } </SCRIPT>

Obsérvese que un "document.write" o sus sentencias equivalentesen un manejador de eventos intrínsecos lo que hacen es crear un nuevodocumento y escribir en él, no modificar el documento actual.

18.2.4Modificación dinámica de documentos

Los scripts que se ejecutan cuando un documento es cargado pueden modificarlos contenidos del documento dinámicamente. La capacidad de hacer esto dependedel lenguaje de scripts en sí (p.ej., la sentencia "document.write" en elmodelo de objetos de HTML no está soportada por algunas marcas).

La modificación dinámica de un documento puede ser modelizada de lasiguiente manera:

  1. Todos los elementosSCRIPT se evalúan en orden a medida que el documento es cargado.
  2. Todas las construcciones de scripts contenidas en un elementoSCRIPT dado que generen datos CDATASGML son evaluados. Su texto generado combinado se inserta en el documentosustituyendo al documentoSCRIPT.
  3. Los datos CDATA generados son evaluados nuevamente.

Los documentos HTML deben ser conformes con el DTD del HTML tanto antes comodespués del procesamiento de cualquiera de los elementosSCRIPT.

El ejemplo siguiente ilustra cómo puede un script modificarun documento dinámicamente. El siguiente script:

 <TITLE>Documento de prueba</TITLE> <SCRIPT type="text/javascript">     document.write("<p><b>¡Hola Mundo!<\/b>") </SCRIPT>

tiene el mismo efecto que este código HTML:

 <TITLE>Documento de prueba</TITLE> <P><B>¡Hola Mundo!</B>

18.3Diseño de documentos para agentes de usuarioque no soporten scripts

Las siguientes secciones tratan sobre cómo pueden los autores creardocumentos que funcionen para agentes de usuario que no soporten scripts.

18.3.1 El elementoNOSCRIPT

<!ELEMENTNOSCRIPT - - (%block;)+  -- contenedor de contenido alternativo para representación no basada en scripts --><!ATTLIST NOSCRIPT%attrs;                              --%coreattrs,%i18n,%events --  >

Etiqueta inicial:obligatoria, Etiqueta final:obligatoria

El elementoNOSCRIPT permite a los autores proporcionar contenido alternativo cuandoun script no es ejecutado. El contenido de un elementoNOSCRIPT sólo debería serrepresentado por un agente de usuario capaz de reconocer scripts en los casossiguientes:

Los agentes de usuario que no soporten scripts en el lado del cliente debenrepresentar los contenidos de este elemento.

En el ejemplo siguiente, un agente de usuario que ejecute elSCRIPTincluirá en el documento algunos datos creados dinámicamente. Si el agentede usuario no soporta scripts, el usuario aún podrá obtener los datospor medio de un vínculo.

<SCRIPT type="text/tcl">...scripts Tcl para insertar datos...</SCRIPT><NOSCRIPT> <P>Acceder a los <A href="http://algunsitio.com/datos">datos.</A></NOSCRIPT>

18.3.2Ocultar datos de scripts a agentes de usuario

Es probable que los agentes de usuario que no reconozcan el elementoSCRIPTrepresenten los contenidos del elemento como texto. Algunos motores de scripts,incluyendo los de los lenguajes JavaScript, VBScript y Tcl, permiten que lassentencias de los scripts estén contenidas en un comentario SGML. Los agentesde usuario que no reconozcan el elementoSCRIPTignorarán así el comentario, mientras que los motores de scripts quefuncionen correctamente entenderán que los scripts de los comentarios deberíanser ejecutados.

Otra solución al problema es mantener los scripts en documentos externosy hacer referencia a ellos con el atributosrc.

Comentando scripts en Javascript
El motor de JavaScript permite que aparezca la cadena "<!--" al principiodel elemento SCRIPT, e ignora el resto de los caracteres hasta el final dela línea. JavaScript interpreta "//" como el inicio de un comentario quese extiende hasta el final de la línea actual. Esta cadena es necesaria paraocultar la cadena "-->" al analizador JavaScript.

<SCRIPT type="text/javascript"><!--  para ocultar los contenidos del script a los navegadores viejos  function cuadrado(i) {    document.write("La llamada pasó ", i ," a la función.","<BR>")    return i * i  }  document.write("La función devolvió ",cuadrado(5),".")// dejar de ocultar contenidos a los navegadores viejos  --></SCRIPT>

Comentando scripts en VBScript
En VBScript, un carácter de comilla simple hace que el resto de la línea actualsea tratada como un comentario. Puede usarse por tanto para ocultar a VBScriptla cadena "-->", por ejemplo:

   <SCRIPT type="text/vbscript">     <!--       Sub blabla()        ...       End Sub     ' -->    </SCRIPT>

Comentando scripts en TCL
En Tcl, el carácter "#" comenta el resto de la línea:

<SCRIPT type="text/tcl"><!--  para ocultar los contenidos del script a los navegadores viejos  proc cuadrado {i} {    document write "La llamada pasó $i a la función.<BR>"    return [expr $i * $i]  }  document write "La función devolvió [cuadrado 5]."# dejar de ocultar los contenidos a los navegadores viejos  --></SCRIPT>

Nota. Algunos navegadores cierran los comentarios alencontrar el primer carácter ">", de modo que para ocultar el contenidode los scripts de estos navegadores, se pueden invertir los operandos de losoperadores relacionales y de desplazamiento (p.ej., usar "y < x" en vezde "x > y") o se pueden usar caracteres de escape dependientes del lenguajede scripts para ">".


anterior  siguiente  contenidos  elementos  atributos  índice

[8]ページ先頭

©2009-2025 Movatter.jp