js剪貼板操作


這是一個很有意思的地方,很多不了解的人或者初級的js編程者會覺得很不可思議,js都那么強大了,訪問剪貼板一個粘貼復制,大概就是一行命令的事情,但是事實如此,js對於訪問本地計算機的剪貼板的支持其實是十分滯后的,看起來似乎是一個很小很小的一個功能,其實即使是html5標准里對於剪貼板操作目前也仍處於草案提議階段,各瀏覽器有自己各自的部分實現方案,有的甚至根本就沒有需要的實現接口,而且事實上,訪問剪貼板的接口標准制定並不是那么容易的一件事情,需要考慮的事情有很多方面,具體哪些地方感興趣的可以參考這里

 

需要標准還在建立中,但是事實上,遇到類似的需求我們並不是不能實現,所以這里總結一下大致幾種實現方案:

 

1.window.clipboardData對象   (有兼容性問題,火狐上不行,支持ie,其它瀏覽器未知)  

當復制的時候body的oncopy事件被觸發,直接return false就是禁止復制,注意是不能復制網頁里的文本了
<body oncopy="alert('禁止復制!');return false;">

clipboardData對象 ,注意網頁里剪貼板到現在只能設置Text類型,即只能復制文本
clearData("Text")         清空粘貼板       clearData(sDataFormat) 刪除剪貼板中指定格式的數據。
getData("Text")           讀取粘貼板的值   getData(sDataFormat) 從剪貼板獲取指定格式的數據。
setData("Text",val)       設置粘貼板的值   setData(sDataFormat, sData) 給剪貼板賦予指定格式的數據。返回 true 表示操作成功。

復制的數據加入相關來源
clipboardData.setData('Text',clipboardData.getData('Text') +
'\r\n來自Pigeon網站' + location.href);

調用時注意不能再body 的oncopy事件上直接用 <body oncopy="setTimeout('ModifyCopyData()',100)">

2.例子:

<input type="text" onclick="oCopy(this)" value="你好.要copy的內容!">
<script>
    function oCopy(obj){
        obj.select();    // 選中輸入框中的內容
        js=obj.createTextRange();
        js.execCommand("Copy") ;
    }
</script>

注意: creatTextRange() 方法是 ms-only的方法 非微軟家的不可用,會報錯.
      execCommand 方法通常用於控制可編輯的 IFRAME 內容,制作富文本編輯器。 但他現在為止還是非標准的,方法的首參數 Commmands 的可選值由各個瀏覽器廠商制定,支持程度並不統一。
      詳細說明:http://www.w3help.org/zh-cn/causes/BX9054
      測試各瀏覽支持情況: http://www.w3help.org/tests/BX9054/execCommand_sCommands_Parameters.html
      使用例子:      http://blog.csdn.net/woshinia/article/details/18664903
      打印,另存為等都是通過這個命令

3.好的方案:

Clipboard.js:不用Flash實現剪貼板功能的輕量級JavaScript庫,
主流瀏覽器都支持這個庫,Safari目前仍不支持cut和copy指令,它使用execCommand實現

使用adobe flash 的方式 zeroclipboard http://zeroclipboard.org/   Github用JavaScript庫ZeroClipboard來實現這一功能
或者用 jquery.zclip.js jquery封裝后的  使用例子: http://www.cnblogs.com/linjiqin/p/3532451.html

html5的剪貼板提議仍在進行中 https://w3c.github.io/clipboard-apis/
具體可用情況可以使用這里can i use it?     http://caniuse.com/#search=clipboard


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM