Flash 拷贝字符串到剪贴板

JS无法做到访问DOM之外的内容,也就无法做到拷贝字符串到系统剪贴板,这时候只能用Flash去实现,个人感觉别无他法。

Flash操作系统剪贴板,知识点有两处。

1 » System.setClipboard(str) 拷贝字符串到系统剪贴板

2 » ExternalInterface.call(func, param...) AS调用JS函数

下面是Flex代码

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
  xmlns:s="library://ns.adobe.com/flex/spark"
  xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="16" minHeight="16">
  <fx:Script>
    <![CDATA[
    public function copyToClipboard():void {
        var text:String = ExternalInterface.call('Copy.clipBoard');
        var status:Boolean = false;

        if (text) {
            System.setClipboard(text);
            status = true;
        }

        ExternalInterface.call('Copy.callback', status ? text : false);
    }
    ]]>
  </fx:Script>
  <mx:Image id="copy" source="@Embed('../asserts/copy.gif')"
    click="copyToClipboard()" useHandCursor="true" buttonMode="true" />
</s:Application>

水平有限,只能做到这个程度。编译处理的swf文件名字为clipboard.swf。在下面的HTML中调用。

<div class="row">
    <input id="clippy" type="text" />
    <object width="16" align="middle" height="16"
        id="clipboard" name="clipboard"
        type="application/x-shockwave-flash" data="clipboard.swf">
        <param name="quality" value="high">
        <param name="bgcolor" value="#ffffff">
        <param name="allowscriptaccess" value="sameDomain">
        <param name="allowfullscreen" value="true">
    </object>
</div>
<script>
var Copy = {};
Copy['clipBoard'] = function() {
    return document.getElementById('clippy').value;
}
Copy['callback'] = function(status) {
    alert(!!status ? status : 'Wrong');
}
</script>

到此为止,未有复杂的东西,解释似乎多余。

查看演示
下载源码

现在还没有评论

留下您的大名