2013-02-17 37 views
0

首先对于坏标题感到抱歉,如果任何人都可以更好地说出这个问题,请做。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

一个HTA绕过它读取你的最后的评论后 - “我要打开文件对话框,将返回完整路径和会在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 
+0

感谢64bit提示。 – theta 2013-02-18 11:05:42

0

这是在IE中的安全设置,可以通过启动你的HTML作为这样

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

执行AFAIK时,HTML文件和VBScript输出都应处于相同的安全设置下。我知道你发布的代码片段,尽管它很漂亮,但在对话结束时窗口弹出闪烁也很难看,所以我没有考虑它。 – theta 2013-02-17 19:07:39

+0

我测试了它,除了浏览窗口和消息框以外没有任何其他的出现。你是否想要一个对话框来获取文件的路径?然后有多种方法.. – peter 2013-02-17 20:12:34

+0

在这里我看到对话框关闭后闪烁,而没有,如果我使用类似于我的问题代码片段的代码。是的,我想要文件打开对话框,将返回完整的路径,并将工作在XP和7,而XP提供'UserAccounts.CommonDialog',7似乎没有可接受的解决方案,从谷歌搜索周围。 – theta 2013-02-17 20:20:27

相关问题