前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >将内容复制到剪切板兼容主流浏览器的解决方案

将内容复制到剪切板兼容主流浏览器的解决方案

作者头像
前端GoGoGo
发布2018-08-27 10:42:16
1.2K0
发布2018-08-27 10:42:16
举报

如果仅仅使用javascript,是否能解决问题?

对于 Internet Explorer

function copyToClipBoard(copyText) {
        if (window.clipboardData) { // ie
            window.clipboardData.setData("Text", copyText);
        }
    }

很简单~

对于其他浏览器,google了半天,发现不太好搞,比如 对于firefox,要让网站的js有使用剪切板的权限是要用户授权的 http://kb.mozillazine.org/Granting_JavaScript_access_to_the_clipboard

看来就靠js是很难搞定了,还是得要靠外援flash呀。

兼容主流浏览器的最终解决方案

使用ZeroClipboard

原理

把一个不可见的 Adobe Flash movie元素放到一个DOM元素上。用户点击那DOM元素时,其实点击的是那不可见的Adobe Flash movie元素,Flash代码来做将内容复制到剪切板的操作。

注意:如果用js模拟一个在那flash上的点击事件,并不能进行复制内容到剪贴板。原因是浏览器和flash的安全限制。

使用

html

<body>
    <div class="demo-area">
        <label for="copy-input">输入要复制到剪切板的文字:</label><br>
        <textarea id="copy-input" cols="30" rows="10"></textarea><br>
        <button id="copy-button">复制到剪贴板</button><br>
    </div>
    <script src="http://libs.baidu.com/jquery/1.9.0/jquery.js"></script>
    <script src="path/to/ZeroClipboard.js"></script>
</body>
</html>

js

//配置ZeroClipboard.swf
ZeroClipboard.config({
    swfPath: './vendor/ZeroClipboard.swf'
});

//初始化
var client = new ZeroClipboard(document.getElementById("copy-button"));

client.on("ready", function(readyEvent) {
    client.on("copy", function(event) {
        var clipboard = event.clipboardData;
        var copyText = $('#copy-input').val();
        clipboard.setData("text/plain", copyText); // 将内容添加到剪切板
    });
});

完整的demo源码见我写的demo

注意:由于要使用flash的缘故,一定要在服务器上运行这个demo。这里推荐个基于nodejs的静态服务器anywhere

官方demo 更多的关于ZeroClipboard的信息见它的github项目页

注:ZeroClipboard的2.0.2版本后不再支持IE8-。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2014.06.06 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 如果仅仅使用javascript,是否能解决问题?
  • 兼容主流浏览器的最终解决方案
    • 原理
      • 使用
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档