JS複製內容到剪貼簿(相容FF/Chrome/Safari所有瀏覽器)

Web開發者發表於2011-12-24

現在瀏覽器種類也越來越多,諸如 IE、Firefox、Chrome、Safari等等,因此現在要實現一個js複製內容到剪貼簿的小功能就不是一件那麼容易的事了。

在FLASH 9 時代,有一個通殺所有瀏覽器的js複製內容到剪貼簿的方案

這個方案是一個最流行的方法: 著名的Clipboard Copy解決方案 利用一個clipboard.swf作為橋樑,複製內容到剪貼簿。

原理是:建立一個隱藏的flash檔案,同時給給flash的變數FlashVars 賦值“clipboard=..”,通過這個賦值flash就會把複製的內容放到剪貼簿。這個方法相容IE、Firefox、Opera、chrome、 Safari,真可謂“萬能”的解決方案。瀏覽器Flash的安裝率非常高,這幾乎是一個完美的解決方案。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Web開發者 - www.Admin10000.com </title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script type="text/javascript"> 
    var clipboardswfdata;
    var setcopy_gettext = function(){
        clipboardswfdata = document.getElementById('test_text').value;
        //alert(clipboardswfdata);
        window.document.clipboardswf.SetVariable('str', clipboardswfdata);
    }
    var floatwin = function(){
        alert('複製成功!');
        //document.getElementById('clipinner').style.display = 'none';
    }
</script>
</head>
<body>
<textarea id="test_text" rows="15" cols="100">文字內容.......</textarea>
<div id="clipboard_content"> 
  <div class="my_clip_button"><span class="clipinner" id="clipinner">複製程式碼到剪下板
    <embed name="clipboardswf" class="clipboardswf" id="clipboardswf" onmouseover="setcopy_gettext()" devicefont="false" src="./_clipboard.swf" menu="false" allowscriptaccess="sameDomain" swliveconnect="true" wmode="transparent" type="application/x-shockwave-flash" height="20" width="100">
    </span>
  </div> 
</div>
</body>
</html>

clipboard.swf 的下載地址:JS複製內容到剪貼簿(相容FF/Chrome/Safari所有瀏覽器) clicpboard.rard

但是 Flash 10 時代,上面的方法已經不行了。

因為flash10中規定了只有在swf上進行了真實的操作(比如滑鼠點選)才能訪問剪下板,而上述方法只是使用了一個隱藏的swf檔案,通過javascript操作flash的剪貼簿,使用者並沒有對swf檔案進行真實的操作,因此這個方法也就失效了。

那麼如何解決這個“真實操作”的問題呢?可以使用一個JavaScript庫:Zero Clipboard,利用這個js庫可以支援利用flash 10 實現複製到剪貼簿。這個方法原理是在一個透明的flash(對使用者來說是不可見的)上覆蓋一個dom元素比如button或div,當點選這個dom時,實際點選的是flash,從而訪問flash的剪貼簿。

 以下是除錯好的例子:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Zero Clipboard Test</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script type="text/javascript" src="ZeroClipboard.js"></script>
<script type="text/javaScript">
  var clip = null;  
  function $(id) { return document.getElementById(id); }  
  function init() {
  	clip = new ZeroClipboard.Client();
  	clip.setHandCursor(true);  	
  	clip.addEventListener('mouseOver', function (client) {
    // update the text on mouse over
    clip.setText( $('fe_text').value );
  	});
  	
  	clip.addEventListener('complete', function (client, text) {
    //debugstr("Copied text to clipboard: " + text );
    alert("該地址已經複製,你可以使用Ctrl+V 貼上。");
  	});

  	clip.glue('clip_button', 'clip_container' );
  }
</script>
</head>
<body onLoad="init()">
<input id="fe_text" cols="50" rows="5" value="複製內容文字">
<span id="clip_container"><span id="clip_button"><strong>複製</strong></span></span>
</body>
</html>

點選下載該例子:JS複製內容到剪貼簿(相容FF/Chrome/Safari所有瀏覽器) zeroclipboardDEMO.rar

除錯時請上傳到網站,本地直接開啟flash會出錯的,沒許可權。zeroClipboard.js檔案裡moviePath屬性是falsh的地址,就是目錄下的那個ZeroClipboard.swf存放的地址位置。

這種js複製內容到剪貼簿的方案可支援瀏覽器:Firefox / IE / opera / chorme / safari 所有瀏覽器!

相關文件:JS實現複製到剪貼簿(支援IE和Firefox)
參考:piaoyi.org

相關文章