2013-02-17 24 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

相關問題