Gestion des dépôts de fichier dans un sandbox HTML hors application

Adobe AIR 1.0 et les versions ultérieures

Un contenu hors application ne peut pas accepter les objets File qui résultent d’un glissement des fichiers vers une application AIR. Il est également impossible de transmettre l’un de ces objets File à un contenu d’application via un pont de sandbox. (Il est nécessaire d’accéder aux propriétés d’objet pendant la sérialisation.) Vous pouvez toutefois continuer à déposer des fichiers dans votre application en écoutant les événements nativeDragDrop AIR de l’objet HTMLLoader.

En temps normal, si un utilisateur dépose un fichier dans un cadre qui héberge un contenu hors application, l’événement dépôt n’est pas propagé de l’enfant au parent. Toutefois, puisque les événements distribués par l’objet HTMLLoader (qui comporte tous les contenus HTML d’une application AIR) ne sont pas intégrés au flux d’événement HTML, vous pouvez continuer à recevoir l’événement dépôt dans un contenu d’application.

Pour recevoir l’événement associé à un dépôt de fichier, le document parent ajoute un écouteur d’événement à l’objet HTMLLoader par le biais de la référence fournie par window.htmlLoader :

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

L’exemple suivant utilise un document parent qui charge une page enfant dans un sandbox distant (http://localhost/). Le parent écoute l’événement nativeDragDrop sur l’objet HTMLLoader et suit en sortie le modèle d’URL 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>

Le document enfant doit présenter une cible de dépôt valide en appelant la méthode preventDefault() de l’objet Event dans les gestionnaires d’événement HTML dragenter et dragover , sous peine que l’événement dépôt ne se produise jamais.

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