2009-06-10 8 views
0

Anwendung: HTA (daher IE) Dies ist eine Anwendung, die SendKeys verwendet, um ein FILE-Eingabefeld zu füllen.IE8 bewirkt, dass der FILE-Eingabeeintrag über SendKeys leer ist

Problem: Datei wird nie hochgeladen.

Beschreibung: Ein Offscreen-Formular (für den Benutzer unsichtbar) lädt eine Datei auf den Server hoch. Die Dateieingabe erfolgt über SendKeys (Javascript). Es scheint isoliert zu sein, wenn IE8 installiert ist.


Weiß jemand, was diese und keine Behelfslösungen verursachen können?

Sorry für fehlende Informationen. Ich werde die Frage mit zusätzlichen Informationen bearbeiten, wenn keine Antworten gesendet werden.

+0

Keine Notwendigkeit zu kommentieren, wie die Verwendung von SendKeys ist eine schlechte Idee ... Es ist nicht mein Code ... – TJR

Antwort

1

IE8 hat das Element < input type = "file" > auf schreibgeschützt gesetzt, um Sicherheitsangriffe zu verhindern. (siehe article).

Daher ist ein programmatischer Weg nicht möglich.

0

Kann der Kompatibilitätsmodus im IE8 als Workaround verwendet werden?

+0

Leider nein, das schreibgeschützte Attribut ist nicht durch den Kompatibilitätsmodus betroffen. – TJR

1

Ich löste dieses Problem tatsächlich mit einem interessanten Trick. Hier ist, wie ...

Eine externe vbscript 'Include-Datei' genannt 'vbshelper.inc', die den folgenden Code enthält:

function stuffKeys(x) 
    Set wshShell = CreateObject("WScript.Shell") 
    wshShell.Sendkeys(x) 
end function 

In Ihrem HTML-Code-Header, legen Sie die folgenden Zeilen wie Script Ihre erste <> -Element ...

<Script language="VBScript" src="vbshelper.inc"> 

function defaultFldr() 
    stuffKeys(" C:\Temp\*.txt~") 
end function 

function do_something() 
. 
. 
. etc 
end function 

</Script> 

[Anmerkung-1 Es gibt einen Raum vor dem C in 'C: \ Temp \ * .txt ~.' und eine Tilde (~) nach dem .txt. ]

[Anmerkung-2 Ich musste Skripttyp = VBScript angeben und nicht type = "text/vbscript". Ich bin mir nicht sicher, warum dies erforderlich ist]


später in Ihrem HTML-Code, erstellen Sie die Taste so ...

<input type="File" id="srcFile" onchange="do_something()" onclick="defaultFldr()"> 

[Hinweis-3:. Ich habe versucht, das nennen stuffKeys funktionieren direkt vom onclick-Befehl, aber es hat nicht funktioniert. Wahrscheinlich, weil Sie einfache Anführungszeichen um die Ordnerzeichenfolge verwenden müssen.]

So ... Sie können das WScript-Objekt nicht innerhalb einer HTML- oder HTA-Seite erstellen, aber es funktioniert, wenn auf eine externe Include-Datei verwiesen wird. Bewahren Sie die Datei 'vbshelper.inc' im selben Ordner wie Ihre HTML- oder HTA-Datei auf.

+0

Könnten Sie Ihren Code auf http://pastebin.com veröffentlichen – TJR

+0

Dies scheint nicht zukunftssicher (da die Absicht des IE zu schreibgeschützt ist, gegen XSS-Angriffe zu schützen).Das Loop-Loch, das Sie gefunden haben, kann zu einem späteren Zeitpunkt gepatcht werden und bricht daher meine Anwendung. Könnten Sie auch javascript: alert (window.navigator.userAgent) posten? – TJR