Tidak melewatkan apa pun dari Javascript ke VBScript di IE9

123

Saya memiliki kerangka kerja yang ditulis dalam VBScript. Di dalam beberapa fungsi dalam kerangka parameter fungsi ini diperiksa untuk pernyataan Nothing in If dan kemudian beberapa tindakan dieksekusi. Kode yang menggunakan kerangka kerja yang ditulis dalam Javascript. Jadi saya harus meneruskan Nothing to function untuk melakukan beberapa tindakan. Di IE8 dan versi sebelumnya bekerja pendekatan selanjutnya:

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

Di IE <9, keluaran akan: Nothing, Null, Nothing.

Di IE9: Nothing, Null, Null.

Bagaimana cara melewatkan Nothing dari Javascript ke VBScript di IE9?

Maaf, saya tahu ini jelek, tapi saya terjebak. Dan benci VBScript.

edit: Ada contoh fungsi kerangka kerja. Saya tidak bisa mengubahnya karena sudah banyak digunakan dalam aplikasi.

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

Memperbarui

Berhenti dari pekerjaan. Menemukan yang lebih baik.

mixel
sumber
10
Catatan kecil: VBScript tidak memiliki operator logika hubung singkat , jadi pernyataan IsObject(val) And val Is Nothingtersebut masih akan menghasilkan kesalahan. Anda harus membaginya menjadi If bersarang.
Cheran Shunmugavel
Saya menutup ini karena terlalu terlokalisasi untuk Anda. Nanti, Anda bisa memberi tanda untuk memberi tahu kami :)
Pos Tim
Apakah VBScript memiliki Dan Juga? Saya tahu VB.Net memilikinya. Betapa pun lumpuhnya itu, setidaknya itu akan memungkinkan terjadinya hubungan arus pendek.
vbullinger
@vbullinger: Tidak, ini tidak memiliki logika malas. blogs.msdn.com/b/ericlippert/archive/2004/07/15/184431.aspx -Artikel Eric Lippert.
mixel

Jawaban:

17

Sayangnya, Anda mungkin terjebak di sini - JavaScript tidak memiliki padanan "Tidak Ada". Lihat Artikel Ini untuk informasi lebih lanjut.

[Sunting] Namun, berikut ini mungkin berhasil. Di VBScript Anda, buat fungsi yang disebut "GetNothing" yang mengembalikan "Nothing". Dalam JavaScript Anda, gunakan "var jsNothing = GetNothing ()". Berasal dari artikel ini

Pandelon
sumber
4

Pertanyaan ini menarik, saya pikir saya akan mencoba dan menjawabnya hanya untuk kesenangan saja.

(Selamat untuk mixel karena mendapatkan pekerjaan yang lebih baik!)

Saya tidak memiliki akses ke IE sekarang, jadi saya tidak dapat menguji ini, tetapi bagaimana jika Anda mencoba menulis fungsi seperti ini:

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

Tentu saja saya tidak tahu apakah skrip VB memungkinkan fungsi panggilan seperti itu ... dan Anda harus berurusan dengan lebih banyak / lebih sedikit argumen.

cwohlman
sumber
Ini solusi yang bagus. Tapi pertanyaan ini sudah mati 3 tahun. Dan saya berharap VBScript juga mati :-) Terima kasih atas upaya dan upvote-nya.
mixel
Saya tidak mencoba untuk memperbaiki masalah (karena saya melihat Anda sudah menemukan solusi yang lebih baik), itu hanya pertanyaan yang menarik dan saya pikir saya akan mencobanya. Terima kasih atas upvote-nya!
cwohlman
VBScript terus menjadi mesin skrip yang menggerakkan beberapa produk HP, jadi memang tidak boleh mati. Namun.
TheBlastOne
0

Gunakan nilai seperti nol atau bahkan angka negatif yang memungkinkan Anda menggunakan evaluasi yang salah, maka Anda tidak perlu khawatir tentang browser yang berbeda dan kebiasaan mereka dalam mengevaluasi NULLobjek.

Timothy Allyn Drake
sumber
1
Terima kasih atas jawabannya tetapi masalahnya ada dalam kerangka kerja. Itu ditulis lama sekali dan digunakan secara luas dalam aplikasi besar dan saya tidak bisa mengubahnya begitu saja. Saya menambahkan contoh pertanyaan dari sebuah fungsi kerangka kerja yang dipanggil dari javascript.
mixel
0

Sebagai contoh, sesuatu seperti ini akan berfungsi tetapi jika browser IE11 atau yang lebih baru, Anda memerlukan tag '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>
svstackoverflow
sumber