Bezüglich
" eine Datei auf die [HTA]-Schnittstelle ziehen und dort ablegen können möchte "
was ich als Wunsch interpretiere, Dateien im laufenden Fenster von HTA abzulegen, anstatt Dateien auf der HTA-Datei selbst oder einer Verknüpfung dazu abzulegen.
Mit HTML5 ist das Ablegen selbst einfach. Verwenden Sie z.B. eine <div>
Element als Ablagefläche. Behandeln Sie für dieses Element die Ereignisse dragenter
, dragover
y drop
. Der Drop-Handler kann z.B. wie folgt aussehen:
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;
}
wo on_files_dropped
ist eine von Ihnen definierte Funktion, die eine Dateiablage behandelt.
Das dynamische Hinzufügen von Ereignishandlern im Ereignis "Dokument geladen" kann wie folgt aussehen:
var dropbox = document.getElementById( 'blah' );
dropbox.addEventListener( 'dragenter', on_dragenter, false );
dropbox.addEventListener( 'dragover', on_dragover, false );
dropbox.addEventListener( 'drop', on_drop, false );
So weit, so gut.
Allerdings greift die Sicherheit mit einer Einschränkung ein: Sie erhalten keine direkte Kenntnis der ursprünglichen Dateipfade nur die Dateinamen und die Dateigrößen. Denn diese Funktion ist für das Web konzipiert, nicht für lokale, vertrauenswürdige HTML-Anwendungen. Es kann also ein Problem sein, muss aber nicht.
-
Für die Verwendung einer abgelegten Datei als Quelle für ein HTML-Element und generell für das Lesen einer abgelegten Datei bietet HTML5 eine FileReader
(es gibt eine Reihe von Tutorials verfügbar, die weiterführende Links zur technischen Dokumentation enthalten).
-
Wenn ein lokaler Pfad erforderlich ist, z. B. für die Wiedergabe einer Datei im Windows Mediaplayer, können Sie annehmen dass der Ziehvorgang aus dem Windows-Explorer stammt, der jetzt auch Datei-Explorer genannt wird, und prüfen Sie dann einfach, ob und in welchem Explorer-Fenster eine Datei mit diesem Namen und dieser Größe vorhanden ist.
Es wird hoffentlich nicht mehr als ein solches Ursprungsfenster gefunden werden.
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;
}
Das war's im Wesentlichen. Außer vielleicht, da HTAs standardmäßig auf IE7 eingestellt sind, wie bekommt man HTML5-Funktionalität. Nun kann durch Doctype-Deklaration, aber so weit in meinem kleinen Experimentieren ich nur die folgenden verwenden:
<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">
Damit erhalten Sie die neueste Internet Explorer-Engine, allerdings um den Preis, dass keine HTA
Element und damit keinen direkten Zugriff auf die Befehlszeile. Ich fand das die Befehlszeile kann durch Ausführen von Windows'' abgerufen werden wmic
Programm aber das ist ein furchtbarer Scherz. Dieser ganze Problembereich, bei dem sich die meisten scheinbar offenen Straßen als geschlossen herausstellen, scheint eine Folge davon zu sein, dass Microsoft jetzt HTAs in Betracht zieht a alte Technologie , wird schleichend zugunsten von werbefinanzierten Vollbild-Apps im Windows 8 AppStore abgeschafft .
Wie auch immer, viel Glück!