Gestione dei rilasci di file nelle sandbox HTML di non applicazione

Adobe AIR 1.0 e versioni successive

Il contenuto di non applicazione non riesce ad accedere agli oggetti File che si ottengono quando i file vengono trascinati in un'applicazione AIR. Né è possibile passare uno di questi oggetti File al contenuto dell'applicazione mediante un bridge sandbox. (Durante la serializzazione è necessario accedere alle proprietà di oggetto.) Tuttavia, è possibile rilasciare ancora file nell'applicazione intercettando gli eventi nativeDragDrop di AIR sull'oggetto HTMLLoader.

Di solito, se un utente rilascia un file in un fotogramma che ospita contenuto di non applicazione, l'evento rilascio non si propaga dall'elemento secondario a quello principale. Tuttavia, poiché gli eventi inviati dall'HTMLLoader (ovvero il contenitore di tutto il contenuto HTML di un'applicazione AIR) non fanno parte del flusso di eventi HTML, è possibile ancora ricevere l'evento drop nel contenuto dell'applicazione.

Per ricevere l'evento per il rilascio di un file, il documento principale aggiunge un listener di eventi all'oggetto HTMLLoader mediante il riferimento fornito da window.htmlLoader :

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

L'esempio seguente utilizza un documento principale che carica una pagina secondaria in una sandbox remota (http://localhost/). Il documento principale intercetta l'evento nativeDragDrop sull'oggetto HTMLLoader e tiene traccia dell'URL del file.

<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>

Il documento secondario deve presentare una valida destinazione di rilascio chiamando il metodo preventDefault() dell'oggetto Event nei gestori eventi HTML dragenter e dragover . In caso contrario, l'evento di rilascio non può mai verificarsi.

<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>