2011-09-27 6 views
123

Tengo un marco escrito en VBScript. Dentro de alguna función en este marco, el parámetro de la función se marca para Nothing en If y luego se ejecutan algunas acciones. Código que usa framework escrito en Javascript. Entonces, necesito pasar Nothing para funcionar para realizar algunas acciones. En Internet Explorer 8 y versiones anteriores trabajado enfoque siguiente:No pasar nada de Javascript a VBScript en IE9

<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 es la salida: Nada, Null, Nada.

En IE9: Nothing, Null, Null.

¿Cómo puedo pasar nada 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 de 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 

actualización

trabajo abandonado. Encontré uno mejor.

+10

Pequeña nota al margen: VBScript [no tiene operadores lógicos en cortocircuito] (http://msdn.microsoft.com/en-us/library/e8zy95hw%28v=VS.85%29.aspx), por lo que La declaración 'IsObject (val) Y val Is Nothing' todavía dará como resultado un error. Tendrás que dividirlo en un Si anidado. –

+0

@Cheran S: Gracias, lo arreglé. – mixel

+0

Cerré esto como demasiado localizado para usted. En el futuro, puedes marcar para decirnos :) –

Respuesta

0

Utilice un valor como cero o incluso un número negativo que le permita simplemente usar evaluaciones falsy, entonces no tiene que preocuparse por diferentes navegadores y sus peculiaridades al evaluar el objeto NULL.

+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 solo. Añadí al ejemplo de pregunta de una función de framework que llamó desde javascript. – mixel

17

Desafortunadamente, probablemente estés atrapado aquí; JavaScript no tiene el equivalente de "Nada". Vea This Article 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()". Viene de this article

+61

¡Hola! Gracias por responder, pero ya encontré una solución: dejé este trabajo y encontré uno mejor;) – mixel

4

Esta pregunta es fascinante, pensé en intentar responderla solo por el gusto de hacerlo.

(Felicidades a Mixel en conseguir un mejor trabajo!)

que no tienen acceso a la IE en este momento, así que no pueden probar esto, pero lo que si se trató de 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ía que lidiar con más/menos argumentos.

+0

Es una buena solución. Pero esta pregunta ya está 3 años muerta. Y me gustaría que VBScript también esté muerto :-) Gracias por el esfuerzo y captar el voto explícito. – mixel

+0

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

+0

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