À propos de & hellip;
“ aimerait être en mesure de glisser-déposer un fichier sur le [HTA] Interface ”
& hellip; que j'interprète comme un désir de déposer des fichiers dans la fenêtre en cours HTA ’, plutôt que de déposer des fichiers sur le fichier HTA lui-même ou un raccourci vers celui-ci.
Avec HTML5, l'abandon lui-même est facile. Utilisez par exemple un élément <div>
en tant que zone de dépôt. Pour cet élément gérer les événements dragenter
, dragover
et drop
. Par exemple. le gestionnaire de dépôt peut ressembler à ceci:
function on_drop(e)
{
e.preventDefault(); // stops the browser from redirecting off to the file
var dt = e.dataTransfer
var is_file_transfer = false;
for(var i = 0; i < dt.types.length; ++i)
{
if(dt.types[i].toLowerCase() == 'files')
{
is_file_transfer = true;
}
}
if(!is_file_transfer)
{
return false;
}
on_files_dropped(dt.files);
return true;
}
& hellip; où on_files_dropped
est une fonction définie par vous qui gère une chute de fichiers.
Ajout des gestionnaires d'événements de manière dynamique en cas chargé de documents, peut ressembler à ceci:
var dropbox = document.getElementById('blah');
dropbox.addEventListener('dragenter', on_dragenter, false);
dropbox.addEventListener('dragover', on_dragover, false);
dropbox.addEventListener('drop', on_drop, false);
Jusqu'à présent, si bon.
Cependant, la sécurité intervient avec une restriction: vous ne connaissez pas directement les chemins de fichier d'origine, seuls les noms de fichier et les tailles de fichier. Pour cette fonctionnalité est conçu pour le Web, pas pour les applications HTML locales de confiance. Donc, cela peut ou ne pas être nécessairement un problème.
Aux fins de l'utilisation d'un fichier déposé comme source pour un élément HTML, et en général pour la lecture d'un fichier déposé, HTML5 offre une FileReader
(il y a un certain nombre de tutorials disponibles, quel lien suite à la documentation technique).
Lorsqu'un chemin local est nécessaire, par ex. Pour lire un fichier dans Windows Mediaplayer, vous pouvez supposer que l'opération de déplacement a commencé avec l'Explorateur Windows, maintenant aussi appelé Explorateur de fichiers, puis vérifiez simplement quelle fenêtre de l'Explorateur, le cas échéant, contient un fichier avec ce nom et cette taille.
Espérons que pas plus d'une telle fenêtre d'origine ne sera trouvée.
var shell = new ActiveXObject("Shell.Application");
var fso = new ActiveXObject("Scripting.FileSystemObject");
function possible_paths_for(filename)
{
var windows = shell.windows(); // Windows Explorer windows.
var n_windows = windows.Count;
var lowercase_filename = filename.toLowerCase();
var paths = Array();
for(var i = 0; i < n_windows; ++i)
{
var url = windows.Item(i).LocationURL;
var path = decodeURI(url.substr(8)).replace(/\//g, '\\');
// The path can be the path of this HTML application (.hta file), so:
if(fso.FolderExists(path))
{
var folder = fso.GetFolder(path);
for(var it = new Enumerator(folder.Files); !it.atEnd(); it.moveNext())
{
var file = it.item();
if(file.Name.toLowerCase() == lowercase_filename)
{
paths.push(file.Path.toLowerCase());
}
}
}
}
return paths;
}
Essentiellement que ’ s il. Sauf, peut-être, puisque les HTA par défaut à IE7, comment obtient-on la fonctionnalité HTML5. Eh bien peut-être par déclaration DOCTYPE, mais jusqu'à présent, dans ma petite expérimentation je viens d'utiliser les éléments suivants:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<!-- A windows web control defaults to quirky IE7 semantics. Request for better: -->
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta http-equiv="MSThemeCompatible" content="yes">
Cela vous donne le dernier moteur d'Internet Explorer, mais au prix d'aucun élément HTA
, et donc pas d'accès direct à la ligne de commande. J'ai trouvé que the command line can be retrieved by running Windows’ wmic
program, mais que ’ est un hack terrible. Ce problème entier, avec la plupart des routes apparemment ouvertes qui se révèlent être fermées, semble être une conséquence de Microsoft considérant maintenant HTA a legacy technology, to be quietly phased out in favor of fullscreen ad-ridden Windows 8 AppStore apps.
De toute façon, bonne chance!
Merci pour la réponse! J'avais peur de ça. Je pense que je pourrais aller avec une interface Prism à une page HTML au lieu de l'HTA. – Joshua
-1 "Un HTA ne peut évidemment pas être la cible d'une opération de suppression de shell" est (maintenant) incorrect. L'activation de la suppression sur un fichier HTA ou un raccourci implique une simple modification du registre, et c'est ce qui a toujours été le cas. Soutenir la chute sur une fenêtre HTA est maintenant simple avec HTML5. –
C'est une belle addition, mais la deuxième réponse en ligne, que j'ai upvoted, dit exactement cela et je ne sais pas pourquoi elle n'a pas été acceptée. Tout le fil est à partir de 2009, donc vous êtes un peu en retard à la fête * et * apparemment vous n'avez pas lu passé cette réponse. Maintenant combinez cela avec le fait qu'il ne fonctionne en effet pas sur un système de vanille - comme celui que vous pourriez vouloir expédier votre HTA à ... vous avez l'idée. – Tomalak