改进AIR网页浏览器:支持拖入本地文件

AIR中允许用户在AIR应用程序和本机操作系统之间、两个应用程序之间以及一个应用程序内不同组件之间拖放操作。下面我们就来改进前面做的网页浏览器,让它支持拖入本地文件。

若要支持拖入动作动作,应用程序(更多情况下是应用程序的可视组件)必须响应nativeDragEnter或 nativeDragOver事件。

典型应用程序之间放置操作步骤通常是:

1.用户将一个Clipboard对象拖到一个组件上方。

2.此组件调度nativeDragEnter事件。

3.nativeDragEnter事件处理函数检查事件对象,以查看可用的数据格式和允许的动作。如果此组件能够处理放置操作,它会调用 NativeDragManager.acceptDragDrop()。

4.NativeDragManage更改鼠标光标,以指示可以放置此对象。

5.用户将此对象放在此组件上。

6.接收组件调度nativeDragDrop事件。

7.接收组件从事件对象内的Clipboard 对象中读取所需格式的数据。

添加nativeDragEnter和nativeDragDrop事件处理函数代码,如下所示:

private function enterHandler(event:NativeDragEvent):void
{ 
    NativeDragManager.acceptDragDrop(event.target as InteractiveObject); 
    NativeDragManager.dropAction = NativeDragActions.LINK; 
} 
  
private function dropHandler(event:NativeDragEvent):void
{ 
    if (event.clipboard.hasFormat(ClipboardFormats.FILE_LIST_FORMAT)) { 
        var fileList:Array = event.clipboard.getData(ClipboardFormats.FILE_LIST_FORMAT) as Array; 
        if (fileList.length == 1) { 
            var file:File = fileList[0] as File; 
            htmlLoader.load(new URLRequest(file.url)); 
            updateLocation(htmlLoader.location); 
        } 
    } 
}

注意:由于HtmlLoader自身了限制,本例中只能本地文件拖入地址栏,如果使用其它Loader倒是没这个问题,但很难加载HTML和PDF,暂时这这样了。

点击此处下载该实例的源码。

发表评论