Pase nada de Javascript a VBScript en IE9


123

Tengo un marco escrito en VBScript. Dentro de alguna función en este marco, el parámetro de la función se verifica para la instrucción Nothing in If y luego se ejecutan algunas acciones. Código que usa framework escrito en Javascript. Así que necesito pasar Nada para funcionar para realizar algunas acciones. En IE8 y versiones anteriores funcionó el siguiente enfoque:

<script type="text/vbscript">
    Function Test(val)
        If (IsNull(val)) Then
            Test = "Null"
        ElseIf (IsObject(val)) Then
            If (val Is Nothing) Then
                Test = "Nothing"
            End If
        End If
    End Function

    Dim jsNothing
    Set jsNothing = Nothing
    msgBox(Test(jsNothing))
    msgBox(Test(Null))
</script>


<script type="text/javascript">
    alert(Test(jsNothing));
</script>

En IE <9 la salida será: Nada, Nulo, Nada.

En IE9: Nada, Nulo, Nulo.

¿Cómo puedo pasar Nothing de Javascript a VBScript en IE9?

Lo siento, sé que es feo, pero estoy atrapado. Y odio VBScript.

editar: hay un ejemplo de función marco. No puedo cambiarlo porque es ampliamente utilizado en la aplicación.

Function ExampleFunction(val)
    If (val Is Nothing) Then
        ExampleFunction = 1
    Else
        ExampleFunction = 0
    End If
End Function

Actualizar

Renunció al trabajo. Encontré uno mejor.


10
Pequeña nota al margen: VBScript no tiene operadores lógicos en cortocircuito , por lo que la declaración IsObject(val) And val Is Nothingaún generará un error. Tendrás que dividirlo en un If anidado.
— Cheran Shunmugavel

Cerré esto como demasiado localizado para ti. En el futuro, puede marcar para avisarnos :)
— Tim Post

¿VBScript tiene y también? Sé que VB.Net lo tiene. Tan patético como es eso, al menos permitirá cortocircuitos.
— vbullinger

@vbullinger: No, no tiene lógica perezosa. blogs.msdn.com/b/ericlippert/archive/2004/07/15/184431.aspx -Artículo de Eric Lippert.
— mixel

Respuestas:


17

Desafortunadamente, probablemente esté atrapado aquí: JavaScript no tiene un equivalente de "Nada". Vea este artículo para más información.

[Editar] Sin embargo, lo siguiente puede funcionar. En su VBScript cree una función llamada "GetNothing" que devuelve "Nothing". En su JavaScript use "var jsNothing = GetNothing ()". Proviene de este artículo


4

Esta pregunta es fascinante, pensé que intentaría responderla solo por diversión.

(¡Felicidades a Mixel por conseguir un mejor trabajo!)

No tengo acceso a IE en este momento, así que no puedo probar esto, pero ¿qué pasa si intentas escribir una función como esta?

<script type="text/vbscript">
  Function CallWithNulls(fn, arg1, arg2, arg3)
    If (isNull(arg1)) arg1 = Nothing
    If (isNull(arg2)) arg2 = Nothing
    If (isNull(arg3)) arg3 = Nothing
    fn(arg1, arg2, arg3)
  End Function
  Function IsNothing(arg1, arg2, arg3)
     return arg1 is Nothing
  End Function
</script>
<script type="text/javascript">
  alert(CallWithNulls(IsNothing, null, 1, 2));
</script>

Por supuesto, no sé si el script VB permite llamar a funciones como esa ... y tendrías que lidiar con más / menos argumentos.


Es una buena solución. Pero esta pregunta ya lleva 3 años muerta. Y deseo que VBScript también esté muerto :-) Gracias por el esfuerzo y atrapar el voto positivo.
— mixel

No estaba tratando de solucionar el problema (ya que vi que ya había encontrado una solución mejor), era solo una pregunta interesante y pensé en darle una puñalada. Gracias por el voto!
— cwohlman

VBScript sigue siendo el motor de secuencias de comandos que impulsa algunos de los productos de HP, por lo que no debería morir. Todavía.
— TheBlastOne

0

Use un valor como cero o incluso un número negativo que le permita simplemente usar evaluaciones falsas, luego no tendrá que preocuparse por los diferentes navegadores y sus peculiaridades al evaluar el NULLobjeto.


1
Gracias por una respuesta, pero el problema está en el marco. Fue escrito hace mucho tiempo y se usa ampliamente en aplicaciones grandes y no puedo cambiarlo. Agregué a la pregunta el ejemplo de una función de marco que llamó desde javascript.
— mixel

0

Como ejemplo, algo como esto funcionará, pero si el navegador es IE11 o posterior, necesitará la etiqueta 'meta'.

<HTML>
<HEAD>
<meta http-equiv="x-ua-compatible" content="IE=10">
<TITLE>Pass Javscript to VBScript</TITLE>

<script>
    var val = "null";

    window.alert("Test: " +  val);
</script>

<script type="text/vbscript">

    PassNothing(val)


    Sub PassNothing(value)
        If LCase(value) = "null" Then
            MsgBox "Java passed 'null' so VBScript = 'Nothing'"
        Else
            Msgbox "Nothing received"
        End If
    End Sub

    </script>

</HEAD>
</HTML>
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.