Pass Nothing จาก Javascript ไปยัง VBScript ใน IE9


123

ฉันมีกรอบที่เขียนด้วย VBScript ภายในบางฟังก์ชันในพารามิเตอร์เฟรมเวิร์กนี้ของฟังก์ชันจะถูกตรวจสอบสำหรับคำสั่ง Nothing in If จากนั้นการดำเนินการบางอย่างจะดำเนินการ โค้ดที่ใช้กรอบที่เขียนด้วย Javascript ดังนั้นฉันต้องส่ง Nothing to function เพื่อดำเนินการบางอย่าง ใน IE8 และเวอร์ชันก่อนหน้านี้ใช้แนวทางต่อไป:

<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 เอาต์พุตจะ: Nothing, Null, Nothing

ใน IE9: Nothing, Null, Null

ฉันจะส่ง Nothing จาก Javascript ไปยัง VBScript ใน IE9 ได้อย่างไร

ขอโทษนะฉันรู้ว่ามันน่าเกลียด แต่ฉันติดกับดัก และเกลียด VBScript

แก้ไข: มีตัวอย่างของฟังก์ชันกรอบ ไม่สามารถเปลี่ยนได้เนื่องจากมีการใช้กันอย่างแพร่หลายในแอปพลิเคชัน

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

ปรับปรุง

ออกจากงาน พบสิ่งที่ดีกว่า


10
ขนาดเล็ก: VBScript ไม่มีตัวดำเนินการทางตรรกะที่ลัดวงจรดังนั้นคำสั่งIsObject(val) And val Is Nothingจะยังคงส่งผลให้เกิดข้อผิดพลาด คุณจะต้องแบ่งออกเป็น If ที่ซ้อนกัน
Cheran Shunmugavel

ฉันปิดสิ่งนี้เนื่องจากเป็นภาษาท้องถิ่นเกินไปสำหรับคุณ ในอนาคตคุณสามารถตั้งค่าสถานะเพื่อแจ้งให้เราทราบ :)
Tim Post

VBScript มีและยัง? ฉันรู้ว่า VB.Net มี ง่อยพอ ๆ กันอย่างน้อยมันก็ยอมให้เกิดการลัดวงจร
vbullinger

@vbullinger: ไม่มันไม่ได้มีตรรกะขี้เกียจ blogs.msdn.com/b/ericlippert/archive/2004/07/15/184431.aspx - บทความของ Eric Lippert
mixel

คำตอบ:


17

น่าเสียดายที่คุณอาจติดอยู่ที่นี่ - JavaScript ไม่มี "Nothing" เทียบเท่า ดูบทความนี้สำหรับข้อมูลเพิ่มเติม

[แก้ไข] อย่างไรก็ตามสิ่งต่อไปนี้อาจใช้ได้ผล ใน VBScript ของคุณสร้างฟังก์ชันที่เรียกว่า "GetNothing" ที่ส่งคืน "Nothing" ใน JavaScript ของคุณให้ใช้ "var jsNothing = GetNothing ()" มาจากบทความนี้


4

คำถามนี้น่าสนใจฉันคิดว่าฉันจะพยายามตอบคำถามนี้เพื่อความสนุก

(ขอแสดงความยินดีกับ Mixel ที่ได้งานที่ดีขึ้น!)

ตอนนี้ฉันไม่สามารถเข้าถึง IE ได้ดังนั้นฉันจึงไม่สามารถทดสอบสิ่งนี้ได้ แต่ถ้าคุณลองเขียนฟังก์ชันเช่นนี้:

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

แน่นอนฉันไม่รู้ว่าสคริปต์ VB อนุญาตให้เรียกใช้ฟังก์ชันแบบนั้นหรือไม่ ... และคุณต้องจัดการกับอาร์กิวเมนต์มากขึ้น / น้อยลง


เป็นวิธีแก้ปัญหาที่ดี แต่คำถามนี้มันตายไปแล้ว 3 ปี และฉันขอให้ VBScript ตายด้วย :-) ขอบคุณสำหรับความพยายามและรับการโหวตเพิ่ม
mixel

ฉันไม่ได้พยายามแก้ไขปัญหา (เนื่องจากฉันเห็นว่าคุณพบวิธีแก้ปัญหาที่ดีกว่าแล้ว) มันเป็นเพียงคำถามที่น่าสนใจและฉันคิดว่าจะให้มันแทง ขอบคุณสำหรับการโหวตเพิ่ม!
cwohlman

VBScript ยังคงเป็นกลไกการเขียนสคริปต์ที่ขับเคลื่อนผลิตภัณฑ์บางอย่างของ HP ดังนั้นจึงไม่ควรตาย ยัง.
TheBlastOne

0

ใช้ค่าเช่นศูนย์หรือแม้แต่จำนวนลบที่จะช่วยให้คุณใช้การประเมินที่ผิดพลาดจากนั้นคุณไม่ต้องกังวลเกี่ยวกับเบราว์เซอร์ที่แตกต่างกันและนิสัยใจคอของพวกเขาในการประเมินNULLวัตถุ


1
ขอบคุณสำหรับคำตอบ แต่ปัญหาอยู่ในกรอบ เขียนไว้นานแล้วและใช้กันอย่างแพร่หลายในแอปพลิเคชันขนาดใหญ่และฉันไม่สามารถเปลี่ยนแปลงได้ ฉันเพิ่มคำถามตัวอย่างของฟังก์ชันของเฟรมเวิร์กที่เรียกจากจาวาสคริปต์
mixel

0

ตัวอย่างเช่นสิ่งนี้จะใช้ได้ แต่ถ้าเบราว์เซอร์เป็น IE11 หรือใหม่กว่าคุณจะต้องมีแท็ก "เมตา"

<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>
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.