改进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,暂时这这样了。点击此处下载该实例的源码。