O conteúdo de não aplicativo não pode acessar os objetos File resultantes quando arquivos são arrastados em um aplicativo do AIR. Nem é possível transmitir um desses objetos File para conteúdo de aplicativo por uma ponte de caixa de proteção. (As propriedades do objeto devem ser acessadas durante a serialização.) No entanto, você pode ainda soltar arquivos no seu aplicativo ouvindo os eventos nativeDragDrop do AIR no objeto HTMLLoader.
Normalmente, se um usuário solta um arquivo em um quadro que hospeda conteúdo de não aplicativo, o evento de soltar não propaga do filho ao pai. No entanto, como os eventos despachados pelo HTMLLoader (que é o contêiner para todo o conteúdo HTML em um aplicativo do AIR) não são parte do fluxo de evento HTML, você pode ainda receber o evento de soltar em conteúdo de aplicativo.
Para receber o evento para um arquivo solto, o documento pai adiciona um ouvinte de evento ao objeto HTMLLoader usando a referência fornecida por
window.htmlLoader
:
window.htmlLoader.addEventListener("nativeDragDrop",function(event){
var filelist = event.clipboard.getData(air.ClipboardFormats.FILE_LIST_FORMAT);
air.trace(filelist[0].url);
});
O exemplo a seguir usa um documento pai que carrega uma página filha em uma caixa de proteção remota (http://localhost/). O pai ouve o evento
nativeDragDrop
no objeto HTMLLoader e marca a URL do arquivo.
<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>
O documento filho deve apresentar um destino de soltar válido chamando o método
preventDefault()
do objeto Event nos manipuladores de eventos
dragenter
e
dragover
. Do contrário, o evento de soltar pode nunca ocorrer.
<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>