与VBScript不同,HTML文件输入表单显示所选文件的完整路径

时间:2013-02-17 15:25:32

标签: html vbscript

首先抱歉标题不好,如果有人能更好地说出这个问题,请做。

我有这个HTML文件:

<html>
  <form action='' method='post'>
    <input id='inbox' type='file' />
    <input id='outbox' type='button' onclick='alert(inbox.value);' 
      value='submit' />
  </form>
</html>

当我用IE打开它,然后浏览一个文件并单击“提交”按钮,我被提醒所选文件的完整路径。但是,如果我尝试使用VBScript编写相同的脚本:

Set IE = CreateObject("InternetExplorer.Application")
IE.Offline = True
IE.Navigate "about:blank"

Do
Loop While IE.Busy

html = "<html>" &_
       "  <form action='' method='post'>" &_
       "    <input id='inbox' type='file' />" &_
       "    <input id='outbox' type='button' onclick='alert(inbox.value);'" &_
       "      value='submit' />" &_
       "  </form>" &_
       "</html>"

IE.Document.write html
IE.Width = 0
IE.Height = 0
IE.Document.All("inbox").Click
IE.Document.All("outbox").Click

我收到臭名昭着的c:\fakepath\file.ext消息警告。

有没有人知道为什么会这样,甚至更好如何克服它?

2 个答案:

答案 0 :(得分:2)

在阅读完最后一条评论后 - “我希望文件打开对话框将返回完整路径,并且可以在XP和7上运行”,并且我认为您希望在WSH环境中调用此对话框,然后您可以使用CommonDialog Control。此控件在Windows 8中已禁用,但可以按照您的意愿在Windows 7中正常运行。需要注意的是,在64位Windows默认情况下.VBS文件作为64位进程执行,但该控件是32位,因此我在我的示例代码和函数中包含了将脚本重新启动为32位进程。

Call Force32bit

With CreateObject("MSComDlg.CommonDialog")
    .Filter = "Text files (*.txt)|*.txt|All files (*.*)|*.*"
    .InitDir = CreateObject("WScript.Shell").SpecialFolders("MyDocuments")
    .MaxFileSize = 256
    .Flags = &H80000 + &H4 + &H8
    .ShowOpen
    If Len(.FileName) Then
        WScript.Echo .FileName
    Else
        WScript.Echo "Canceled"
    End If
End With

Sub Force32bit()
    Dim sWinDir, sSys64, sSys32, oShell
    Set oShell = CreateObject("WScript.Shell")
    sWinDir = oShell.ExpandEnvironmentStrings("%WinDir%")
    With CreateObject("Scripting.FileSystemObject")
        sSys64 = .BuildPath(sWinDir, "SysWOW64")
        If Not .FolderExists(sSys64) Then Exit Sub
        sSys32 = .BuildPath(sWinDir, "System32")
        If sSys32 = WScript.Path Then
            oShell.CurrentDirectory = sSys64
            oShell.Run "wscript.exe " & Chr(34) & _
            WScript.ScriptFullName & Chr(34), 1, False
            WScript.Quit
        End If
    End With
End Sub

答案 1 :(得分:0)

这是IE中的安全设置,您可以通过启动html作为这样的hta来规避它

Set wShell=CreateObject("WScript.Shell")
Set oExec=wShell.Exec("mshta.exe ""about:<input type=file id=FILE><script>FILE.click();new ActiveXObject('Scripting.FileSystemObject').GetStandardStream(1).WriteLine(FILE.value);close();resizeTo(0,0);</script>""")
MsgBox oExec.StdOut.ReadAll