[Indice]


¿Cómo se escriben los scripts para el IE?

El elemento <SCRIPT>

Los scripts de Visual Basic para el IE se escriben con las mismas convenciones que ya conocemos de ASP. Todas las definiciones de procedimientos, funciones, instrucciones, operadores, etc., se pueden escribir de la misma forma. Todo el código deberá ir entre <SCRIPT> y </SCRIPT>. Puesto que este elemento HTML es el mismo que se emplea con otros lenguajes, como JavaScript, es preciso indicar al navegador el lenguaje que se va a utilizar al definir el script. Sea por ejemplo:

<SCRIPT LANGUAGE="VBScript">
     <!--
       Document.Write("Esto ha sido escrito por VBScript")
     -->
</SCRIPT>

Fíjate en que dentro de la etiqueta HTML <SCRIPT> y antes del código VBScript propiamente dicho, aparece el símbolo del comentario HTML <!--. Esto se hace para evitar que los navegadores que no son capaces de interpretar el script muestren el código.

Los scripts pueden escribirse tanto en la <HEAD> como en el <BODY> de la página. Por claridad a la hora de revisar el código, es preferible escribir todas las secuencias de comandos al principio de la página en la <HEAD>, aunque esto dependerá de las necesidades del programa, claro. Por ejemplo, si escribimos


<HTML>
<HEAD><TITLE>Prueba de VBScript</TITLE>
<SCRIPT LANGUAGE="VBScript">
     <!--
       Document.Write("Esto ha sido escrito por VBScript desde HEAD <BR>")
     -->
</SCRIPT>
</HEAD>

<BODY>

<SCRIPT LANGUAGE="VBScript">
     <!--
       Document.Write("Esto ha sido escrito por VBScript desde BODY")
     -->
</SCRIPT>
<P>
Esto ha sido escrito por HTML.

</BODY>
</HTML>


Se obtiene:

Esto ha sido escrito por VBScript desde HEAD
Esto ha sido escrito por VBScript desde BODY

Esto ha sido escrito por HTML.

Como puedes ver, aquí utilizamos Document.Write() (un objeto del IE, junto con uno de sus métodos), que es equivalente al objeto de ASP Response.Write(), y que sirve para escribir en la ventana del navegador cualquier resultado generado por el código.

Procedimientos y funciones

Al igual que en ASP, pueden definirse procedimientos (Sub) y funciones (Function) en VBScript. Normalmente estos procesos se invocarán capturando un evento, es decir, un suceso que se produce y es detectado en la ventana del navegador. Uno de los eventos más comunes es el que detecta la pulsación (onClick) del puntero del ratón sobre un objeto, por ejemplo, un botón de un formuulario. En el siguiente ejemplo veremos cómo escribir una página que captura un evento en el botón de un formulario mediante un procedimiento Sub, que a su vez, llama a una función:

<HTML>
<HEAD>
<TITLE>Capturar evento de boton</TITLE>
<SCRIPT LANGUAGE="VBScript">
  <!--
     Function Mensaje()     
        Document.Write("Esto ha sido escrito por una función de VBScript<BR>")
     End function
  -->
</SCRIPT>

<SCRIPT LANGUAGE="VBScript">
  <!--
      Sub boton1_onClick     
        Call Mensaje()
        Document.Write("Esto ha sido escrito por un procedimiento de VBScript")
      End sub
  -->
</SCRIPT>

</HEAD>
<BODY>

<FORM NAME="Formulario1">
    <INPUT TYPE="Button" NAME="Boton1" VALUE="Prueba">
</FORM>

</BODY>
</HTML>

Y al pulsar el botón, se obtiene:

Esto ha sido escrito por una función de VBScript
Esto ha sido escrito por un procedimiento de VBScript

Fíjate en cómo está construido el procedimiento. Lo primero es la definición de procedimiento: Sub, a continuación se escribe el nombre del objeto sobre el que se desea capturar el evento: boton1 y después escribimos el evento que deseamos capturar sobre dicho objeto: _onClick. Ya en el interior del procedimiento, tenemos una llamada a la función: Call Mensaje() y para terminar, se escribe un nueva línea en la ventana: Document.Write("Esto ha sido escrito por un procedimiento de VBScript"). Si escribes el ejemplo y lo pruebas en tu servidor (o en local), verás que al pulsar el botón, en efecto, aparecen los textos generados por el procedimiento y la función, pero no quedará ni rastro del botón. Esto es debido al orden y lugar en que estan escritas las instrucciones de escritura.

Hay que prestar atención también al orden en que se escriben los procesos. En este ejemplo, lógicamente, la función debe escribirse primero, ya que debe existir cuando el procedimiento sea cargado. El navegador, dependiendo de cómo esté configurado, puede no emitir mensajes de error en pantalla si hay algun problema en el código. De todas formas, si algo falla, muestra un mensaje en la línea de estado, en la parte inferior izquierda de la ventana donde se esté ejecutando el navegador. Para ver el detalle del problema solamente hay que hacer clic dos veces seguidas sobre el aviso, y el IE abrirá un cuadro de diálogo con la información del error.

Como ya se ha dicho, los scripts pueden escribirse en cualquier posición dentro de la página, siempre que la lógica del programa lo permita. El ejemplo anterior, podría escribirse sacando el procedimiento del HEAD, y llevándolo al BODY, embebido en el código HTML del formulario. Así:


<HTML>
<HEAD>
<TITLE>Capturar evento de boton</TITLE>
<SCRIPT LANGUAGE="VBScript">
  <!--
     Function Mensaje()     
        Document.Write("Esto ha sido escrito por una función de VBScript<BR>")
     End function
  -->
</SCRIPT>

</HEAD>
<BODY>

<FORM NAME="Formulario1">
    <INPUT TYPE="Button" NAME="Boton1" VALUE="Prueba">

<SCRIPT FOR="Boton1" EVENT="onClick" LANGUAGE="VBScript">
  <!--
        Call Mensaje()
        Document.Write("Esto ha sido escrito por un procedimiento de VBScript")
  -->
</SCRIPT>
</FORM>

</BODY>
</HTML>

Como puedes ver, la única diferencia consiste en que hay que definir en el propio elemento <SCRIPT> para qué objeto es el script con FOR="boton1" y qué evento se pretende capturar con EVENT="onClick".

Si la instrucción que ha de ejecutarse al capturar el evento es sencilla, puede escribirse directamente en la definición del objeto que dispara el evento, en este caso el botón del formulario, prescindiendo incluso del elemento <SCRIPT>. Así:


<HTML>
<HEAD>
<TITLE>Capturar evento de boton</TITLE>
</HEAD>
<BODY>

<FORM NAME="Formulario1">
    <INPUT TYPE="Button" NAME="Boton1" VALUE="Prueba" onClick="Document.Write('Hola')">
</FORM>

</BODY>
</HTML>

Y al pulsar el botón, se obtiene:

Hola

ATENCIÓN: en este caso el texto que ha de escribir el objeto Document.Write() no va entre comillas dobles, sino comillas simples.

Dos funciones nuevas

En el entorno de ejecución del IE existen dos funciones que no estan disponibles en ASP. Estas son MsgBox() e InputBox(). Veamos la primera.

MsgBox(mensaje[, botones][, título][, ayuda, contexto])

Esta función muestra un mensaje en un cuadro de diálogo que puede incluir varios botones de decisión, y devuelve un número según el botón pulsado por el usuario.

Estos son sus parámetros:

Estos son los valores que pueden utilizarse para calcular la suma de botones. Fíjate en que hay cuatro grupos de valores. Solamente debes elegir uno (o ninguno) de cada grupo, de lo contrario se produce un error.

Constante Valor Descripción
vbOKOnly    0 Muestra solamente el botón Aceptar (por defecto).
vbOKCancel    1 Muestra los botones Aceptar y Cancelar.
vbAbortRetryIgnore    2 Muestra los botones Anular, Reintentar e Ignorar.
vbYesNoCancel    3 Muestra los botones , No y Cancelar.
vbYesNo    4 Muestra los botones y No.
vbRetryCancel    5 Muestra los botones Reintentar y Cancelar.
vbCritical   16 Muestra el icono de Mensaje crítico.
vbQuestion   32 Muestra el icono de Pregunta de advertencia.
vbExclamation   48 Muestra el icono Mensaje de advertencia.
vbInformation   64 Muestra el icono de Mensaje de información.
vbDefaultButton1    0 El primer botón es el predeterminado (por defecto).
vbDefaultButton2  256 El segundo botón es el predeterminado.
vbDefaultButton3  512 El tercer botón es el predeterminado.
vbDefaultButton4  768 El cuarto botón es el predeterminado.
vbApplicationModal    0 Modal para la aplicación; el usuario debe responder al cuadro de mensajes antes de poder seguir trabajando en la aplicación actual (por defecto).
vbSystemModal 4096 Modal para el sistema; se suspenden todas las aplicaciones hasta que el usuario responda al cuadro de mensajes.

Y estos son los valores que devuelve MsgBox() según el botón pulsado por el usuario:

Constante Valor Botón
vbOK 1 Aceptar
vbCancel 2 Cancelar
vbAbort 3 Anular
vbRetry 4 Reintentar
vbIgnore 5 Ignorar
vbYes 6
vbNo 7 No

Este sería un ejemplo simple de uso de MsgBox():


<HTML>
<HEAD>
<TITLE>Prueba de mensaje</TITLE>
</HEAD>
<BODY>

<FORM NAME="Formulario1">
    <INPUT TYPE="Button" NAME="Boton1" VALUE="Prueba">
    <INPUT TYPE="text" NAME="campo1" VALUE="Prueba">
<SCRIPT FOR="Boton1" EVENT="onClick" LANGUAGE="VBScript">
  <!--
        MsgBox("Prueba de mensaje")
  -->
</SCRIPT>
</FORM>

</BODY>
</HTML>

Y después de pulsar el botón "prueba" del formulario tendremos esto:

Este era un ejemplo muy simple, donde la función se emplea sólo para mostrar un mensaje. Veamos otro donde, además, se captura el valor que devuelve después de que el usuario pulse alguno de los botones del cuadro de diálogo:


<HTML>
<HEAD>
<TITLE>Prueba de mensaje</TITLE>
</HEAD>
<BODY>

<FORM NAME="Formulario1">
    <INPUT TYPE="Button" NAME="Boton1" VALUE="Prueba">
    <INPUT TYPE="text" NAME="campo1" >
<SCRIPT FOR="Boton1" EVENT="onClick" LANGUAGE="VBScript">
  <!--
    Formulario1.campo1.value = MsgBox("Esto es una prueba de mensaje con botones" & _
	                           vbCrLf & "¿Quieres continuar?", 4+32, "Pregunta")
  -->
</SCRIPT>
</FORM>

</BODY>
</HTML>

Esta sería la apariencia después de pulsar el botón "Prueba" del formulario:

Y esta después de contestar "Si" al cuadro de diálogo:

MsgBox() también se emplea para informar de errores durante la ejecución del programa. En este caso, solamente ofrecerá el botón "Aceptar", cuyo único significado es darse por enterado del problema. Estos son los 4 posibles:

     

Y este es el código para obtenerlos:

MsgBox ("Mensaje", vbExclamation, "Titulo")
MsgBox ("Mensaje", vbCritical, "Titulo")
MsgBox ("Mensaje", vbIinformation, "Titulo")
MsgBox ("Mensaje", vbQuestion, "Titulo")



A continuación veamos la segunda función:

InputBox(mensaje[, título][, predeterminado][, posiciónX][, posiciónY][, ayuda, contexto])

Esta función es algo parecida a la anterior. Muestra un mensaje en un cuadro de diálogo junto con un cuadro de texto para que el usuario pueda escribir los valores que necesite la aplicación. A diferencia de MsgBox(), no se pueden definir conjuntos de botones ni iconos. Solamente están disponibles los de "Aceptar" y "Cancelar". Si el usuario escribe algún valor en el cuadro de texto correspondiente y pulsa "Aceptar", el valor es transferido a donde se indique en el programa. Si se escribe y se pulsa "Cancelar", la captura no se produce.

Estos son sus parámetros:

Y puede que te preguntes que eso de "twips". Un twuip es la veinteava parte de un punto de impresión (TWentIeth of a Point). Se trata de un sistema utilizado por Visual Basic para tratar de mantener el tamaño de los formularios y cuadros de mensaje independientemente de la resolución de pantalla empleada por el cliente. Veamos un ejemplo de uso:

<HTML>
<HEAD>
<TITLE>Prueba de mensaje</TITLE>
</HEAD>
<BODY>

<FORM NAME="Formulario1">
    <INPUT TYPE="Button" NAME="Boton1" VALUE="Prueba">
    <INPUT TYPE="text" NAME="campo1" >
<SCRIPT FOR="Boton1" EVENT="onClick" LANGUAGE="VBScript">
  <!--
    Formulario1.campo1.value = InputBox("Escribe un número entre 0 y 10", "Entrar valor")
  -->
</SCRIPT>
</FORM>

</BODY>
</HTML>

Esta sería la apariencia después de pulsar el botón "Prueba" del formulario:

Y esta después de haber escrito "10" en el cuadro de texto y pulsado "Aceptar"

Para evitar errores, deberás programar instrucciones que controlen lo que el usuario ha contestado, por si en lugar de los datos solicitados ha escrito otra cosa, o no ha escrito nada, ya que ambas cosas suelen suceder con mucha frecuencia. Recuerda: sólo a ti te interesa que esto funcione bien.

[Indice]