AIR 中的 HTML 复制和粘贴

Adobe AIR 1.0 和更高版本

Adobe AIR 中的 HTML 环境自身提供针对复制和粘贴的事件组和默认行为。只有在应用程序安全沙箱中运行的代码才能通过 AIR Clipboard.generalClipboard 对象直接访问系统剪贴板。在非应用程序安全沙箱中运行的 JavaScript 代码可以通过因响应 HTML 文档中某元素调度的某个复制或粘贴事件而调度的事件对象来访问剪贴板。

复制和粘贴事件包括:copycutpaste。为这些事件调度的对象可通过 clipboardData 属性提供对剪贴板的访问。

默认行为

默认情况下,AIR 将复制选定的项目以响应复制命令,该命令可通过快捷键或上下文菜单生成。在可编辑区域内,AIR 将剪切文本以响应剪切命令,或将文本粘贴到光标位置或选定位置以响应粘贴命令。

若要阻止默认行为,事件处理函数可以调用被调度事件对象的 preventDefault() 方法。

使用事件对象的 clipboardData 属性

如果事件对象是因为某个复制或粘贴事件而被调度,则该事件对象的 clipboardData 属性允许您读取和写入剪贴板数据。

若要在处理复制或剪切事件时写入剪贴板,请使用 clipboardData 对象的 setData() 方法,并传递要复制的数据和 MIME 类型:

function customCopy(event){ 
    event.clipboardData.setData("text/plain", "A copied string."); 
}

若要访问被粘贴的数据,您可以使用 clipboardData 对象的 getData() 方法,并传递数据格式的 MIME 类型。可用格式由 types 属性报告。

function customPaste(event){ 
    var pastedData = event.clipboardData("text/plain"); 
}

只能在 paste 事件调度的事件对象中访问 getData() 方法和 types 属性。

下面的示例说明如何覆盖 HTML 页中默认的复制和粘贴行为。copy 事件处理函数将复制的文本设置为斜体并将其作为 HTML 文本复制到剪贴板。cut 事件处理函数将选定的数据复制到剪贴板并将其从文档中移除。paste 处理函数将剪贴板内容作为 HTML 插入并将插入内容的样式设置为粗体文本。

<html> 
<head> 
    <title>Copy and Paste</title>             
    <script language="javascript" type="text/javascript"> 
        function onCopy(event){ 
            var selection = window.getSelection(); 
            event.clipboardData.setData("text/html","<i>" + selection + "</i>"); 
            event.preventDefault(); 
        } 
 
        function onCut(event){ 
             var selection = window.getSelection(); 
             event.clipboardData.setData("text/html","<i>" + selection + "</i>"); 
             var range = selection.getRangeAt(0); 
             range.extractContents(); 
             
            event.preventDefault(); 
        } 
 
        function onPaste(event){ 
            var insertion = document.createElement("b"); 
            insertion.innerHTML = event.clipboardData.getData("text/html"); 
             var selection = window.getSelection(); 
             var range = selection.getRangeAt(0); 
             range.insertNode(insertion); 
            event.preventDefault(); 
        } 
    </script> 
</head> 
<body onCopy="onCopy(event)" 
     onPaste="onPaste(event)" 
     onCut="onCut(event)"> 
<p>Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium  
doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore  
veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam 
voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur  
magni dolores eos qui ratione voluptatem sequi nesciunt.</p> 
</body> 
</html>