Hantera filsläppningar i HTML-sandlådor av annan typ än application

Adobe AIR 1.0 och senare

Innehåll i sandlådor av annan typ än application har inte tillgång till File-objekt som skapas när filer dras till ett AIR-program. Det går heller inte att skicka något av dessa File-objekt till programinnehåll via en sandlådebrygga. (Objektegenskaperna måste nås under serialisering.) Du kan emellertid fortfarande släppa filer i programmet genom att avlyssna nativeDragDrop-händelser för objektet HTMLLoader i AIR.

Om en användare släpper en fil i en bildruta som är värd för icke programbaserat innehåll, sprids vanligtvis inte släpphändelsen från den underordnade till den överordnade. Eftersom händelserna skickas av HTMLLoader (som är behållare för allt HTML-innehåll i ett AIR-program) som inte tillhör HTML-händelseflödet, kan du emellertid ändå ta emot släpphändelsen i programinnehållet.

För att kunna ta emot händelsen för ett filsläpp, lägger det överordnade dokumentet till en händelseavlyssnare i HTMLLoader-objektet med hjälp av referensen i window.htmlLoader:

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

Följande exempel använder ett överordnat dokument som läser in en underordnad sida till en fjärrsandlåda (http://localhost/). Det överordnade avlyssnar händelsen nativeDragDrop för HTMLLoader-objektet och skriver ut filens 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>

Det underordnade dokumentet måste presentera ett giltigt släppmål genom att anropa Event-objektets preventDefault()-metod i HTML-händelsehanterarna dragenter och dragover. Annars kan släpphändelsen inte utföras.

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