JS復制內容到剪貼板: 兼容IE、Firefox、Chrome、Safari所有瀏覽器【轉】


正 文:


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

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

 

    這個方案是一個最流行的方法: 著名的Clipboard Copy解決方案 利用一個clipboard.swf作為橋梁,復制內容到剪貼板。
    原理是:創建一個隱藏的flash文件,同時給給flash的變量FlashVars 賦值“clipboard=..”,通過這個賦值flash就會把復制的內容放到剪貼板。這個方法兼容IE、Firefox、Opera、chrome、 Safari,真可謂“萬能”的解決方案。瀏覽器Flash的安裝率非常高,這幾乎是一個完美的解決方案。

 

JS部分:

<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>
 

  

HTML部分:

<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>

  

 

    clipboard.swf 的下載地址:_clipboard.rar.rar

 

    但是 Flash 10 時代,上面的方法已經不行了。
    因為flash10中規定了只有在swf上進行了真實的操作(比如鼠標點擊)才能訪問剪切板,而上述方法只是使用了一個隱藏的swf文件,通過javascript操作flash的剪貼板,用戶並沒有對swf文件進行真實的操作,因此這個方法也就失效了。

 

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

 

    飄易拿來我調試好的小例子:

<html>
<head>
<title>Zero Clipboard Test</title>
<script type="text/javascript" src="ZeroClipboard.js"></script>
<script language="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=復制內容文本1 >
<span id="clip_container"><span id="clip_button"><b>復制</b></span></span>
</body>
</html>

  

 

    飄易提供的例子下載:zeroclipboard.rar

 

    調試時請上傳到網站,本地直接打開flash會出錯的,沒權限。zeroClipboard.js文件里moviePath屬性是falsh的地址,就是目錄下的那個ZeroClipboard.swf存放的地址位置。

 

    這種js復制內容到剪貼板的方案可支持瀏覽器:Firefox / IE / opera / chorme / safari 所有瀏覽器!

 

參考:
http://it.nekounya.com/javascript-ie-firefox-compatible-copy-to-clipboard.html
http://www.watch-life.net/javascript/copy-to-clipboard-solution.html
http://www.cnwebskill.com/Web_230.aspx

 

轉載出處:http://www.piaoyi.org/web-css/js-copy-clipboard.html


免責聲明!

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



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