IE9'da Javascript'ten VBScript'e Hiçbir Şey Geçirmeyin


123

VBScript ile yazılmış bir çerçevem ​​var. Bu çerçevedeki bazı işlevlerin içinde, işlevin parametresi, If deyiminde Hiçbir Şey için kontrol edilir ve ardından bazı eylemler yürütülür. Javascript ile yazılmış çerçeveyi kullanan kod. Bu yüzden bazı eylemleri gerçekleştirmek için Nothing geçmem gerekiyor. IE8 ve önceki sürümlerde sonraki yaklaşımda çalıştı:

<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>

IE <9'da çıktı: Nothing, Null, Nothing olacaktır.

IE9'da: Hiçbir şey, Null, Null.

IE9'da Javascript'ten VBScript'e hiçbir şeyi nasıl geçirebilirim?

Üzgünüm, çirkin olduğunu biliyorum ama tuzağa düştüm. Ve VBScript'ten nefret ediyorum.

düzenleme: Çerçeve işlevi için bir örnek var. Uygulamada yaygın olarak kullanıldığı için değiştiremem.

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

Güncelleme

İşten ayrıldı. Daha iyi bir tane buldum.


10
Küçük not : VBScript kısa devreli mantıksal işleçlere sahip değildir , bu nedenle ifade IsObject(val) And val Is Nothingyine de bir hatayla sonuçlanacaktır. İç içe geçmiş bir If'ye bölmeniz gerekecek.
Cherán Shunmugavel

Bunu senin için fazla yerel olduğu için kapattım. Gelecekte, bize bildirmek için işaretlemeniz yeterli :)
Tim Gönderi

VBScript'te Ve Ayrıca Var mı? VB.Net'te olduğunu biliyorum. Ne kadar topal olsa da, en azından kısa devreye izin verecektir.
vbullinger

@vbullinger: Hayır, tembel mantığı yok. blogs.msdn.com/b/ericlippert/archive/2004/07/15/184431.aspx -Eric Lippert'in makalesi.
mixel

Yanıtlar:


17

Ne yazık ki, muhtemelen burada sıkışmışsınızdır - JavaScript'in "Hiçbir şey" eşdeğeri yoktur. Daha fazla bilgi için Bu Makaleye bakın .

[Düzenle] Ancak, aşağıdakiler işe yarayabilir. VBScript'inizde "Hiçbir Şey" döndüren "GetNothing" adlı bir işlev oluşturun. JavaScript'inizde "var jsNothing = GetNothing ()" kullanın. Bu makaleden geliyor


4

Bu soru büyüleyici, sırf eğlence olsun diye cevaplamaya çalışayım dedim.

(Daha iyi bir iş bulduğunuz için tebrikler!)

Şu anda IE'ye erişimim yok, bu yüzden bunu test edemem, ama ya şöyle bir işlev yazmayı denediyseniz:

<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>

Elbette, VB betiğinin bu tür işlevlerin çağrılmasına izin verip vermediğini bilmiyorum ... ve daha fazla / daha az argümanla uğraşmanız gerekir.


Bu güzel bir çözüm. Ancak bu soru zaten 3 yıl öldü. Ve VBScript'in de ölmesini diliyorum :-) Çabalarınız için teşekkürler ve olumlu oyu yakalayın.
mixel

Sorunu çözmeye çalışmıyordum (zaten daha iyi bir çözüm bulduğunuzu gördüğüm için), bu sadece ilginç bir soruydu ve bir bıçak vermeyi düşündüm. Olumlu oy için teşekkürler!
cwohlman

VBScript, HP'nin bazı ürünlerine güç veren komut dosyası motoru olmaya devam ediyor, bu yüzden gerçekten ölmemesi gerekiyor. Hala.
TheBlastOne

0

Sadece yanlış değerlendirmeler kullanmanıza izin verecek sıfır veya hatta negatif bir sayı gibi bir değer kullanın, o zaman nesneyi değerlendirirken farklı tarayıcılar ve tuhaflıkları hakkında endişelenmenize gerek kalmaz NULL.


1
Cevabınız için teşekkürler ama sorun çerçeve içinde. Uzun zaman önce yazılmıştı ve büyük uygulamalarda yaygın olarak kullanılıyor ve sadece onu değiştiremem. Javascript'ten çağrılan bir çerçeve işlevinin soru örneğini ekledim.
mixel

0

Örnek olarak, bunun gibi bir şey çalışacaktır, ancak tarayıcı IE11 veya sonraki bir sürümse, 'meta' etiketine ihtiyacınız olacaktır.

<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>
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.