2009-06-10 15 views
0

Application: HTA (donc IE) Il s'agit d'une application qui utilise SendKeys pour remplir un champ de saisie FILE.IE8 entraînant l'effacement de l'entrée d'entrée FILE via SendKeys

Problème: Le fichier n'est jamais téléchargé.

Description: Un formulaire hors écran (invisible pour l'utilisateur) télécharge un fichier sur le serveur. L'entrée du fichier est entrée via SendKeys (javascript). Apparaît être isolé lorsque IE8 est installé.


Est-ce que quelqu'un sait ce qui peut être à l'origine de cette situation et des solutions de contournement?

Désolé pour le manque d'informations. Je vais modifier la question avec des informations supplémentaires si aucune réponse n'est soumise.

+0

Pas besoin de commenter sur l'utilisation de SendKeys est une mauvaise idée ... Ce n'est pas mon code ... – TJR

Répondre

1

IE8 a défini l'élément < input type = "file" > en lecture seule afin de prévenir les attaques de sécurité. (Voir article).

Par conséquent, une méthode par programme n'est pas possible.

0

Est-il possible d'utiliser le mode de compatibilité dans IE8 comme solution de rechange?

+0

Malheureusement non, l'attribut en lecture seule n'est pas affecté par le mode de compatibilité. – TJR

1

J'ai effectivement résolu ce problème avec un truc intéressant. Voilà comment ...

Créer un vbscript externe 'inclure le fichier' appelé 'vbshelper.inc' qui contient le code suivant:

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

l'intérieur de votre tête de code HTML, placez les lignes suivantes votre premier < script> ...

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

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

function do_something() 
. 
. 
. etc 
end function 

</Script> 

[note-1 Il y a un espace avant le C dans C: \ Temp \ * ~ txt. »et un tilde (~) après la txt. ]

[Note-2 J'ai dû spécifier le type de script = VBScript et non le type = "text/vbscript". Je ne sais pas pourquoi cela est nécessaire]


plus tard, dans votre code HTML, créez le bouton comme ça ...

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

[Note-3. J'ai essayé d'appeler le stuffKeys fonctionne directement depuis la commande onclick, mais cela n'a pas fonctionné. Alors ... Vous ne pouvez pas créer l'objet WScript à partir d'une page HTML ou HTA, mais cela fonctionne lorsqu'il est référencé à partir d'un fichier include externe. Conservez le fichier 'vbshelper.inc' dans le même dossier que votre fichier HTML ou HTA.

+0

Pourriez-vous publier votre code sur http://pastebin.com – TJR

+0

Cela ne semble pas être à l'épreuve du temps (étant donné que la modification de IE en lecture seule vise à protéger contre les attaques XSS).Le trou de la boucle que vous avez trouvé peut être corrigé à un moment ultérieur et donc casser mon application. Aussi, pourriez-vous poster javascript: alert (window.navigator.userAgent). – TJR