Abgelegte Dateien in anwendungsfremden HTML-Sandboxen

Adobe AIR 1.0 und höher

Anwendungsfremde Inhalte können nicht auf die File-Objekte zugreifen, die entstehen, wenn Dateien in eine AIR-Anwendung gezogen werden. Es ist auch nicht möglich, eines dieser File-Objekte über eine Sandbox-Brücke an Anwendungsinhalte zu übergeben. (Auf die Objekteigenschaften muss während der Serialisierung zugegriffen werden.) Sie können dennoch Dateien in Ihrer Anwendung ablegen, indem Sie für die nativeDragDrop-AIR-Ereignisse des HTMLLoader-Objekts Listener einrichten.

Wenn ein Benutzer normalerweise eine Datei in einem Bild ablegt, das anwendungsfremde Inhalte beherbergt, wird das drop-Ereignis nicht vom untergeordneten an das übergeordnete Objekt weitergegeben. Da jedoch die vom HTMLLoader (dem Container für alle HTML-Inhalte in einer AIR-Anwendung) ausgelösten Ereignisse nicht Teil des HTML-Ereignisflusses sind, können Sie das drop-Ereignis im Anwendungsinhalt immer noch empfangen.

Um das Ereignis für eine abzulegende Datei zu empfangen, definiert das übergeordnete Dokument für den HTMLLoader einen Ereignis-Listener, und zwar mithilfe der vom window.htmlLoader bereitgestellten Verweis:

window.htmlLoader.addEventListener("nativeDragDrop",function(event){ 
    var filelist = event.clipboard.getData(air.ClipboardFormats.FILE_LIST_FORMAT); 
    air.trace(filelist[0].url); 
});

Im folgenden Beispiel wird ein übergeordnetes Dokument verwendet, das eine untergeordnete Seite in eine Remote-Sandbox (http://localhost/) lädt. Das übergeordnete Dokument wartet auf das Ereignis nativeDragDrop des HTMLLoader-Objekts und ermittelt die Datei-URL.

<html> 
<head> 
<title>Drag-and-drop in a remote sandbox</title> 
<script language="javascript" type="text/javascript" src="AIRAliases.js"></script> 
<script language="javascript"> 
    window.htmlLoader.addEventListener("nativeDragDrop",function(event){ 
        var filelist = event.clipboard.getData(air.ClipboardFormats.FILE_LIST_FORMAT); 
        air.trace(filelist[0].url); 
    }); 
</script> 
</head> 
<body> 
       <iframe src="child.html" 
               sandboxRoot="http://localhost/"  
               documentRoot="app:/"  
               frameBorder="0"  width="100%" height="100%"> 
       </iframe> 
</body> 
</html>

Das untergeordnete Dokument muss ein gültiges Ablageziel bereitstellen, indem es die Ereignisobjektmethode preventDefault() in den HTML-Ereignisprozeduren dragenter und dragover aufruft. Andernfalls kann kein drop-Ereignis eintreten.

<html> 
<head> 
    <title>Drag and drop target</title>             
    <script language="javascript" type="text/javascript"> 
        function preventDefault(event){ 
            event.preventDefault(); 
        } 
    </script> 
</head> 
<body ondragenter="preventDefault(event)" ondragover="preventDefault(event)">  
<div> 
<h1>Drop Files Here</h1> 
</div> 
</body> 
</html>