IE9에서 Javascript에서 VBScript로 아무것도 전달하지 않음


123

VBScript로 작성된 프레임 워크가 있습니다. 이 프레임 워크의 일부 함수 내에서 함수의 매개 변수가 If 문에서 Nothing인지 확인한 다음 일부 작업이 실행됩니다. 자바 스크립트로 작성된 프레임 워크를 사용하는 코드. 따라서 일부 작업을 수행하려면 Nothing을 전달해야합니다. 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.

IE9에서 Javascript에서 VBScript로 아무것도 전달하지 않으려면 어떻게해야합니까?

미안하지만 못생긴 건 알지만 갇혔어요. 그리고 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 2011 년

나는 당신에게 너무 현지화되어 이것을 마감했습니다. 앞으로는 신고 만하면됩니다. :)
Tim Post

VBScript에는 And 또한 있습니까? 나는 VB.Net에 그것을 알고 있습니다. 절름발이는 적어도 단락을 허용합니다.
vbullinger

@vbullinger : 아니요, 게으른 논리가 없습니다. blogs.msdn.com/b/ericlippert/archive/2004/07/15/184431.aspx -Eric Lippert의 기사.
mixel 2012

답변:


17

불행히도 당신은 아마 여기에 갇혀있을 것입니다. JavaScript에는 "Nothing"에 해당하는 것이 없습니다. 자세한 내용은 이 기사 를 참조하십시오.

[편집] 그러나 다음은 작동 할 수 있습니다. VBScript에서 "Nothing"을 반환하는 "GetNothing"이라는 함수를 만듭니다. 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 2014 년

나는 문제를 고치려고하지 않았고 (이미 더 나은 해결책을 찾은 것을 보았 기 때문에) 단지 흥미로운 질문이었고 나는 그것을 찌르겠다고 생각했습니다. 투표 해 주셔서 감사합니다!
cwohlman 2014 년

VBScript는 계속해서 일부 HP 제품을 구동하는 스크립팅 엔진이므로 실제로 죽어서는 안됩니다. 아직.
TheBlastOne

0

단순히 거짓 평가를 사용할 수있는 0 또는 음수와 같은 값을 사용하면 NULL개체 를 평가할 때 다른 브라우저와 그 특성에 대해 걱정할 필요가 없습니다 .


1
답변 해 주셔서 감사하지만 문제는 프레임 워크에 있습니다. 오래전에 쓰여졌 고 대규모 응용 프로그램에서 널리 사용되고 있으며 그냥 변경할 수 없습니다. 나는 자바 스크립트에서 호출 된 프레임 워크 기능의 질문 예를 추가했습니다.
mixel

0

예를 들어 이와 같은 것이 작동하지만 브라우저가 IE11 이상이면 '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>
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.