Bestanden neerzetten in niet-toepassingssandboxen in HMTL

Adobe AIR 1.0 of hoger

Inhoud die niet van de toepassing afkomstig is, heeft geen toegang tot File-objecten die worden gemaakt wanneer bestanden naar een AIR-toepassing worden gesleept. Het is ook niet mogelijk een van deze File-objecten aan inhoud van de toepassing door te geven via een sandboxbridge. (De objecteigenschappen moeten worden benaderd tijdens het serialiseren.) U kunt echter wel bestanden in uw toepassing neerzetten door te luisteren naar de nativeDragDrop-gebeurtenissen van AIR voor het HTMLLoader-object.

Als een gebruiker een bestand neerzet in een frame dat inhoud bevat die niet van de toepassing afkomstig is, wordt de neerzetgebeurtenis gewoonlijk niet van het onderliggende naar het bovenliggende item doorgevoerd. Omdat de gebeurtenissen die door de HTMLLoader (die de container is voor alle HTML-inhoud in een AIR-toepassing) worden verzonden geen deel uitmaken van de HTML-gebeurtenissenstroom, kunt u de neerzetgebeurtenis echter nog steeds ontvangen in inhoud van de toepassing.

Om de gebeurtenis voor het neerzetten van een bestand te ontvangen, voegt het bovenliggende document een gebeurtenislistener aan het HTMLLoader-object toe met de verwijzing die is geleverd door window.htmlLoader :

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

In het volgende voorbeeld laadt een bovenliggend document een onderliggende pagina in een externe sandbox (http://localhost/). Het bovenliggende document luistert naar de gebeurtenis nativeDragDrop van het HTMLLoader-object en haalt hier de bestands-URL uit op.

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

Het onderliggende document moet een geldig doel opleveren door de preventDefault() -methode van het gebeurtenisobject aan te roepen in de HTML-gebeurtenishandlers dragenter en dragover . Anders kan het neerzetten niet plaatsvinden.

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