跨瀏覽器的復制粘貼方案


web開發中常常要實現“復制到剪切板”功能。這個功能很實用,但是由於安全問題,瀏覽器的限制越來越嚴,實現的方法也越來越有限了。Firefox默認下不能直接通過Javascript操作剪切板,必須開啟相關的設置才行。想只通過Javascript技術實現跨瀏覽器的剪切板是行不通的。現在常用的方法是利用JavaScript+Flash實現,普遍流傳的辦法是_clipboard.swf,這是國外最早實現的(著名的Clipboard Copy解決方案: http://www.jeffothy.com/weblog/clipboard-copy/)。但是很可惜,_clipboard.swf在新出來的flash10中無效,因為flash10中規定了只有在swf上進行了實際的操作(比如鼠標點擊)才能啟動剪切板。而_clipboard.swf方法的swf是隱藏的,通過JavaScript來操作flash的剪切板,顯然沒有對swf進行實際的用戶操作。

針對這個,最近國外出現了一種新的方法,而且專門做了一個JavaScript庫 Zero Clipboard ,它包含一個flash影片和一個JavaScript接口,這個flash是透明的(不是隱藏),用戶不會察覺到它的存在。這個flash覆蓋在一個DOM元素上,比如button,div之類,當點擊這個DOM時,你實際點擊的是這個flash,這個作用在flash上的動作能夠開啟flash的剪切板。這實際上就是一種clickjacking。

DEMO頁面 : http://bowser.macminicolo.net/~jhuckaby/zeroclipboard/

Zero Clipboard項目主頁: http://code.google.com/p/zeroclipboard/

網上流行的阿里媽媽的復制代碼的實際來源:http://www.jeffothy.com/weblog/clipboard-copy/

zeroclipboard

<!doctype html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <title>復制到剪切板 by 司徒正美</title>
        <script type="text/javascript" src="ZeroClipboard.js"></script>
        <script language="JavaScript">
            function get(id) { return document.getElementById(id); }
            function toClipboard(copy_id,input_id) {
                var clip = new ZeroClipboard.Client();
                clip.setHandCursor(true);
                clip.setText(get(input_id).value);		
                clip.addEventListener('complete', function (client) {
                    alert("Copy Ok!");
                });
                clip.glue(copy_id);
            }
        </script>
    </head>
    <body>
        <input type="text" id="input_text" />
        <input id="copy_button" type="button"  value="copy" onmouseOver="toClipboard(this.id,'input_text')" />
        <br/>
        <input type="text" id="input_text2" />
        <input id="copy_button2" type="button"  value="copy" onmouseOver="toClipboard(this.id,'input_text2')"/>
        <br/>
        <input type="text" id="input_text3" />
        <input id="copy_button3" type="button"  value="copy" onmouseOver="toClipboard(this.id,'input_text3')"/>
    </body>
</html>


免責聲明!

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



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