VB脚本适用于Windows XP,但不适用于Windows 7

时间:2014-05-08 16:14:55

标签: windows vbscript

我有一个简单的VBScript,我在我的网页中使用它来旋转位于名为" media \ rotate"的文件夹中的图像。当我在Windows XP中运行它时,我的脚本运行正常,但如果我从Windows 7运行它,则它无效。我使用的是Windows 7 32位,而我的Windows XP是Service Pack 3.

我的脚本如下所示:

 Dim gRotatorFiles, gFileCount, gFileIndex

  gFileCount = 0
  gFileIndex = 1

  Sub LoadRotatorImages()
    Dim oFileSystem, oFolder, oFile

    Set gRotatorFiles = CreateObject("POSCommonObjects.POSCollection")
    Set oFileSystem = CreateObject("Scripting.FileSystemObject")

    If oFileSystem.FolderExists("C:\Program Files\Customer Display\media\rotate") Then
      Set oFolder = oFileSystem.GetFolder("C:\Program Files\Customer Display\media\rotate")

      If Not oFolder Is Nothing Then
        If Not oFolder.Files Is Nothing Then
          For Each oFile In oFolder.Files
            gRotatorFiles.Add oFile.Path, oFile.Name
          Next
        End If
      End If
    End If

    gFileCount = gRotatorFiles.Count
    Set oFileSystem = Nothing
    Set oFolder = Nothing
    Set oFile = Nothing
  End Sub

  Sub RotateImages()
    If gFileCount > 0 Then
      gFileIndex = gFileIndex + 1

      If gFileIndex >= gFileCount Then
        gFileIndex = 1
      End If

      LoadCurrentImage()
      window.setTimeout "RotateImages()", 10000
    End If
  End Sub

  Sub LoadCurrentImage()
    document.all("AdImage").Filters(0).Apply
    document.all("AdImage").src = gRotatorFiles(CInt(gFileIndex))
    document.all("AdImage").Filters(0).Play
  End Sub

然后我在我的页面中将其称为:

<script language="vbscript" src="RotateImages.vbs"></script>
<script language="vbscript">
Sub Window_OnLoad()
RotateImages()
End Sub
</script>

在身体里:

<img id="AdImage" style="FILTER: prodig:DXImageTransform.Microsoft.GradientWipe(duration=2)" src="">

我想知道是否有人知道这些操作系统之间的不一致可能导致这些问题,或者它是否在我的代码中。

1 个答案:

答案 0 :(得分:0)

根据可测试的东西进行故障排除:

' On Error Resume Next

' global var used by LoadRotatorImages() and RotateImages()
Dim gRotatorFiles

' preparation: init gRotatorFiles
Sub LoadRotatorImages()
'   Set gRotatorFiles = CreateObject("POSCommonObjects.POSCollection")
    Set gRotatorFiles = CreateObject("System.Collections.ArrayList")
'   Set gRotatorFiles = CreateObject("System.Collection.ArrayList")
    gRotatorFiles.Add "fi"
    gRotatorFiles.Add "fa"
    gRotatorFiles.Add "fo"
End Sub

' real work: using gRotatorFiles
Sub RotateImages()
    For Each f In gRotatorFiles
        WScript.Echo f
    Next
End Sub

' Then I call it in my page like this:
' but I forgot to call LoadRotatorImages()
LoadRotatorImages()
RotateImages()

输出:

cscript 23547130.vbs
fi
fa
fo

第一次拍摄:

在您发布的代码中,您不会调用LoadRotatorImages()。如果添加此调用修复您的问题,请禁用我在您的代码中怀疑的EVIL全局OERN并发布错误消息。

第二枪:

&#34;没有得到错误&#34;由一些人犯On Error Resume Next或(也许;我不使用IE)引起的#34;保持对错误的保持沉默&#34; Internet选项中的设置。证据:如果在演示代码中激活OERN和错误的CreateObject,则根本没有输出。再次禁用OERN后,您会收到can't create object: 'System.Collection.ArrayList'消息。

在您的生产代码中使用OERN是否取决于您,但如果没有OERN(或等效的IE设置),您不应该在没有测试代码的情况下提出问题。

如果代码运行既没有错误也没有输出,即使&#34;错误中断&#34;打开,尝试为重要的先决条件添加诊断。 E.g。

' On Error Resume Next
...
    Set gRotatorFiles = CreateObject("System.Collections.ArrayList")
'   Set gRotatorFiles = CreateObject("System.Collection.ArrayList")
    WScript.Echo "****", TypeName(gRotatorFiles)
...

结果:

cscript 23547130.vbs
**** ArrayList

如果TypeName(gRotatorFiles)没有提供合理的内容

  • 仔细检查组件的安装
  • 考虑使用“更本土的”&#39;集合(Scripting.Dictionary,ArrayList,...)