Không chuyển gì từ Javascript sang VBScript trong IE9


123

Tôi có một khung được viết bằng VBScript. Bên trong một số hàm trong tham số khung này của hàm được kiểm tra cho câu lệnh nothing in If và sau đó một số hành động được thực thi. Mã sử ​​dụng khung được viết bằng Javascript. Vì vậy, tôi cần phải vượt qua Không có gì để hoạt động để thực hiện một số hành động. Trong IE8 và các phiên bản trước đã hoạt động cách tiếp theo:

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

Trong IE <9 đầu ra sẽ: Không có gì, Không, Không có gì.

Trong IE9: Không có gì, Null, Null.

Làm cách nào tôi có thể chuyển Không có gì từ Javascript sang VBScript trong IE9?

Xin lỗi, tôi biết nó xấu, nhưng tôi bị mắc kẹt. Và ghét VBScript.

chỉnh sửa: Có một ví dụ về chức năng khung. Tôi không thể thay đổi nó vì nó được sử dụng rộng rãi trong ứng dụng.

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

Cập nhật

Bỏ việc. Tìm thấy một tốt hơn.


10
Sidenote nhỏ: VBScript không có toán tử logic ngắn mạch , do đó, câu lệnh IsObject(val) And val Is Nothingvẫn sẽ dẫn đến lỗi. Bạn sẽ phải chia nó thành một If lồng nhau.
Cheran Shunmugavel

Tôi đóng cái này là quá cục bộ cho bạn. Trong tương lai, bạn chỉ có thể gắn cờ để cho chúng tôi biết :)
Tim Post

VBScript có Và Ngoài ra không? Tôi biết VB.Net có nó. Như khập khiễng như vậy, ít nhất nó sẽ cho phép ngắn mạch.
vbullinger

@vbullinger: Không, nó không có logic lười biếng. blog.msdn.com/b/ericlippert/archive/2004/07/15/184431.aspx -Eric Lippert của bài viết.
mixel

Câu trả lời:


17

Thật không may, bạn có thể bị mắc kẹt ở đây - JavaScript không có tương đương "Không có gì". Xem điều này để biết thêm thông tin.

[Chỉnh sửa] Tuy nhiên, sau đây có thể hoạt động. Trong VBScript của bạn, hãy tạo một hàm gọi là "GetNoth" trả về "Không có gì". Trong JavaScript của bạn, hãy sử dụng "var jsNoth = GetNoth ()". Đến từ bài viết này


4

Câu hỏi này rất hấp dẫn, tôi nghĩ tôi sẽ thử và trả lời nó chỉ vì niềm vui của nó.

(Chúc mừng mixel để có được một công việc tốt hơn!)

Tôi không có quyền truy cập vào IE ngay bây giờ, vì vậy tôi không thể kiểm tra điều này, nhưng nếu bạn đã thử viết một chức năng như thế này:

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

Tất nhiên tôi không biết liệu VB script có cho phép gọi các hàm như vậy không ... và bạn sẽ phải giải quyết nhiều hơn / ít đối số hơn.


Đó là một cách giải quyết tốt đẹp. Nhưng câu hỏi này đã chết 3 năm rồi. Và tôi ước VBScript cũng sẽ chết :-) Cảm ơn bạn đã nỗ lực và nắm bắt được upvote.
mixel

Tôi đã không cố gắng khắc phục vấn đề (vì tôi thấy bạn đã tìm ra giải pháp tốt hơn), đó chỉ là một câu hỏi thú vị và tôi nghĩ rằng tôi sẽ cho nó một cú đâm. Cảm ơn các upvote!
cwohlman

VBScript tiếp tục là công cụ viết kịch bản cung cấp năng lượng cho một số sản phẩm của HP, vì vậy nó thực sự không nên chết. Chưa.
TheBlastOne

0

Sử dụng một giá trị như số 0 hoặc thậm chí số âm cho phép bạn chỉ cần sử dụng các đánh giá sai lệch, sau đó bạn không phải lo lắng về các trình duyệt khác nhau và các yêu cầu của chúng trong việc đánh giá NULLđối tượng.


1
Cảm ơn cho một câu trả lời nhưng vấn đề là trong khuôn khổ. Nó đã được viết từ lâu và được sử dụng rộng rãi trong ứng dụng lớn và tôi không thể thay đổi nó. Tôi đã thêm vào ví dụ câu hỏi về một chức năng của khung được gọi từ javascript.
mixel

0

Ví dụ, một cái gì đó như thế này sẽ hoạt động nhưng nếu trình duyệt là IE11 trở lên, bạn sẽ cần thẻ '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>
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.