JavaScript實(shí)現(xiàn)復(fù)制功能各瀏覽器支持情況實(shí)測(cè)
更新時(shí)間:2013年07月18日 17:26:44 作者:
這兩天在做Web前端時(shí),遇到需求通過(guò)js實(shí)現(xiàn)文本復(fù)制的功能,下面與大家分享下各瀏覽器對(duì)復(fù)制功能的支持情況,感興趣的朋友可以參考下哈
這兩天在做Web前端時(shí),遇到需求通過(guò)js實(shí)現(xiàn)文本復(fù)制的功能。
先不考慮瀏覽器的兼容性,看看各瀏覽器對(duì)復(fù)制功能的支持情況:
1、IE瀏覽器,解決方法有三種,代碼如下:
function copy(txtid){
var txtObj = document.getElementById(txtid);
if(window.clipboardData){ // 僅IE支持此對(duì)象,firefox、chrome不支持
//1、通過(guò)clipboardData對(duì)象實(shí)現(xiàn)復(fù)制
//window.clipboardData.clearData();
//window.clipboardData.setData("Text",txtObj.value);
//2、通過(guò)document對(duì)象實(shí)現(xiàn)復(fù)制:先選擇中文本,再執(zhí)行復(fù)制命令
//txtObj.select();
//document.execCommand("Copy"); // 僅IE支持,F(xiàn)irefox報(bào)語(yǔ)法錯(cuò)誤,chrome執(zhí)行結(jié)果返回false(不支持)
//3、通過(guò)TextRange對(duì)象實(shí)現(xiàn)現(xiàn)復(fù)制:可以不用先選中內(nèi)容
txtObj.createTextRange().execCommand("Copy");
}
}
2、Firefox,通過(guò)接口的方法實(shí)現(xiàn),火狐是出于安全原因,在17之后版本關(guān)閉此接口,17及之前版本可用。代碼如下:
var clip = Components.classes['@mozilla.org/widget/clipboard;1'].createInstance(Components.interface.nsIClipboard);
3、Chrome出于安全,未向用戶提供對(duì)剪貼板的操作。由此可見(jiàn),各瀏覽器對(duì)復(fù)制功能的支持并不統(tǒng)一。
Zero Clipboard庫(kù)
jhuckaby寫的Zero Clipboard的js類庫(kù),利用Flash完成復(fù)制內(nèi)容到剪貼板。只要瀏覽器裝有Flash插件就可以復(fù)制內(nèi)容,通過(guò)ActionScript屏蔽了JavaScript的不足,解決瀏覽器間復(fù)制兼容性問(wèn)題。
Zero Clipboard的實(shí)現(xiàn)原理:Zero Clipboard首先生成Flash對(duì)象標(biāo)簽,讓透明的Flash漂浮在復(fù)制按鈕之上,其實(shí)點(diǎn)擊的不是按鈕而是Flash,這樣將需要的內(nèi)容傳入Flash,再通過(guò)Flash的復(fù)制到系統(tǒng)剪貼板。
Zero Clipboard的使用方法
注意:由于是基于Flash實(shí)現(xiàn),F(xiàn)lash出于安全,需要在Web容器(例如Apache、Tomcat)中才能運(yùn)行,直接打開(kāi)Flash將不會(huì)被加載,按鈕類似假死現(xiàn)象,網(wǎng)上說(shuō)右鍵Flash設(shè)置將ZeroClipboard.swf添加到受信任位置,感覺(jué)應(yīng)該是行的,我試了,仍然不行,也可能是我本地瀏覽器的問(wèn)題。
1>下載Zero Clipboard的壓縮包,解壓后把文件夾中兩個(gè)文件:ZeroClipboard.js和ZeroClipboard.swf放入到你的項(xiàng)目中;
2>引入Zero Clipboard.js文件,如下代碼:<script type="text/javascript" src="ZeroClipboard.js"></script>;
注意:ZeroClipboard.js與ZeroClipboard.swf需要放在同一路徑下,如果不在同一路徑,可使用ZeroClipboard.setMoviePath()來(lái)設(shè)置。
3>簡(jiǎn)單復(fù)制代碼如下:
var clip = new ZeroClipboard.Client(); // 新建一個(gè)clip對(duì)象
clip.setHandCursor( true ); // 設(shè)置鼠標(biāo)為手型
clip.setText("hello,world"); // 設(shè)置要復(fù)制的文本,可以為文本框的值
clip.glue("copy-botton"); // 為clip注冊(cè)一個(gè)按鈕,參數(shù)為按鈕元素的id,點(diǎn)擊按鈕就可以實(shí)現(xiàn)復(fù)制
4>Zero Clipboard常用方法,建議直接查看源碼:
reposition():防止當(dāng)頁(yè)面大小發(fā)生變化時(shí),F(xiàn)lash按鈕可能會(huì)錯(cuò)位問(wèn)題
hide() :隱藏Flash按鈕
show() :顯示Flash按鈕
setCSSEffects():解決Flash遮擋按鈕樣式失效問(wèn)題(將:hover修改為.hover)。
5>Zero Clipboard 常用事件,事件處理函數(shù)為addEventListener():
load :Flash按鈕加載完事件
mouseOver:鼠標(biāo)移上事件
mouseOut: 鼠標(biāo)移出事件
mouseDown:鼠標(biāo)按下事件
mouseUp:鼠標(biāo)松開(kāi)事件
complete:復(fù)制成功事件
jquery.zclip庫(kù)
由于ZeroClipboard是基于原生JavaScript實(shí)現(xiàn),jquery.zclip使用jQuery對(duì)Zero Clipboard進(jìn)行封裝,如果項(xiàng)目中已經(jīng)使用jQuery,建議使用它,jquery.zclip體積較小。
jquery.zclip下載地址:http://www.steamdev.com/zclip/
Zero Clipboard下載地址:https://github.com/zeroclipboard/ZeroClipboard/releases
示例下載:
為了方便測(cè)試,我將jquery.zclip和Zero Clipboard寫好的例子上傳到csdn,示例必須在web容器里運(yùn)行。
demo下載地址
先不考慮瀏覽器的兼容性,看看各瀏覽器對(duì)復(fù)制功能的支持情況:
1、IE瀏覽器,解決方法有三種,代碼如下:
復(fù)制代碼 代碼如下:
function copy(txtid){
var txtObj = document.getElementById(txtid);
if(window.clipboardData){ // 僅IE支持此對(duì)象,firefox、chrome不支持
//1、通過(guò)clipboardData對(duì)象實(shí)現(xiàn)復(fù)制
//window.clipboardData.clearData();
//window.clipboardData.setData("Text",txtObj.value);
//2、通過(guò)document對(duì)象實(shí)現(xiàn)復(fù)制:先選擇中文本,再執(zhí)行復(fù)制命令
//txtObj.select();
//document.execCommand("Copy"); // 僅IE支持,F(xiàn)irefox報(bào)語(yǔ)法錯(cuò)誤,chrome執(zhí)行結(jié)果返回false(不支持)
//3、通過(guò)TextRange對(duì)象實(shí)現(xiàn)現(xiàn)復(fù)制:可以不用先選中內(nèi)容
txtObj.createTextRange().execCommand("Copy");
}
}
2、Firefox,通過(guò)接口的方法實(shí)現(xiàn),火狐是出于安全原因,在17之后版本關(guān)閉此接口,17及之前版本可用。代碼如下:
復(fù)制代碼 代碼如下:
var clip = Components.classes['@mozilla.org/widget/clipboard;1'].createInstance(Components.interface.nsIClipboard);
3、Chrome出于安全,未向用戶提供對(duì)剪貼板的操作。由此可見(jiàn),各瀏覽器對(duì)復(fù)制功能的支持并不統(tǒng)一。
Zero Clipboard庫(kù)
jhuckaby寫的Zero Clipboard的js類庫(kù),利用Flash完成復(fù)制內(nèi)容到剪貼板。只要瀏覽器裝有Flash插件就可以復(fù)制內(nèi)容,通過(guò)ActionScript屏蔽了JavaScript的不足,解決瀏覽器間復(fù)制兼容性問(wèn)題。
Zero Clipboard的實(shí)現(xiàn)原理:Zero Clipboard首先生成Flash對(duì)象標(biāo)簽,讓透明的Flash漂浮在復(fù)制按鈕之上,其實(shí)點(diǎn)擊的不是按鈕而是Flash,這樣將需要的內(nèi)容傳入Flash,再通過(guò)Flash的復(fù)制到系統(tǒng)剪貼板。
Zero Clipboard的使用方法
注意:由于是基于Flash實(shí)現(xiàn),F(xiàn)lash出于安全,需要在Web容器(例如Apache、Tomcat)中才能運(yùn)行,直接打開(kāi)Flash將不會(huì)被加載,按鈕類似假死現(xiàn)象,網(wǎng)上說(shuō)右鍵Flash設(shè)置將ZeroClipboard.swf添加到受信任位置,感覺(jué)應(yīng)該是行的,我試了,仍然不行,也可能是我本地瀏覽器的問(wèn)題。
1>下載Zero Clipboard的壓縮包,解壓后把文件夾中兩個(gè)文件:ZeroClipboard.js和ZeroClipboard.swf放入到你的項(xiàng)目中;
2>引入Zero Clipboard.js文件,如下代碼:<script type="text/javascript" src="ZeroClipboard.js"></script>;
注意:ZeroClipboard.js與ZeroClipboard.swf需要放在同一路徑下,如果不在同一路徑,可使用ZeroClipboard.setMoviePath()來(lái)設(shè)置。
3>簡(jiǎn)單復(fù)制代碼如下:
復(fù)制代碼 代碼如下:
var clip = new ZeroClipboard.Client(); // 新建一個(gè)clip對(duì)象
clip.setHandCursor( true ); // 設(shè)置鼠標(biāo)為手型
clip.setText("hello,world"); // 設(shè)置要復(fù)制的文本,可以為文本框的值
clip.glue("copy-botton"); // 為clip注冊(cè)一個(gè)按鈕,參數(shù)為按鈕元素的id,點(diǎn)擊按鈕就可以實(shí)現(xiàn)復(fù)制
4>Zero Clipboard常用方法,建議直接查看源碼:
reposition():防止當(dāng)頁(yè)面大小發(fā)生變化時(shí),F(xiàn)lash按鈕可能會(huì)錯(cuò)位問(wèn)題
hide() :隱藏Flash按鈕
show() :顯示Flash按鈕
setCSSEffects():解決Flash遮擋按鈕樣式失效問(wèn)題(將:hover修改為.hover)。
5>Zero Clipboard 常用事件,事件處理函數(shù)為addEventListener():
load :Flash按鈕加載完事件
mouseOver:鼠標(biāo)移上事件
mouseOut: 鼠標(biāo)移出事件
mouseDown:鼠標(biāo)按下事件
mouseUp:鼠標(biāo)松開(kāi)事件
complete:復(fù)制成功事件
jquery.zclip庫(kù)
由于ZeroClipboard是基于原生JavaScript實(shí)現(xiàn),jquery.zclip使用jQuery對(duì)Zero Clipboard進(jìn)行封裝,如果項(xiàng)目中已經(jīng)使用jQuery,建議使用它,jquery.zclip體積較小。
jquery.zclip下載地址:http://www.steamdev.com/zclip/
Zero Clipboard下載地址:https://github.com/zeroclipboard/ZeroClipboard/releases
示例下載:
為了方便測(cè)試,我將jquery.zclip和Zero Clipboard寫好的例子上傳到csdn,示例必須在web容器里運(yùn)行。
demo下載地址
您可能感興趣的文章:
- 使用clipboard.js實(shí)現(xiàn)復(fù)制功能的示例代碼
- js實(shí)現(xiàn)一鍵復(fù)制功能
- JS實(shí)現(xiàn)復(fù)制功能
- JavaScript 實(shí)現(xiàn)完美兼容多瀏覽器的復(fù)制功能代碼
- extjs表格文本啟用選擇復(fù)制功能具體實(shí)現(xiàn)
- js禁止頁(yè)面復(fù)制功能禁用頁(yè)面右鍵菜單示例代碼
- javaScript復(fù)制功能調(diào)用實(shí)現(xiàn)方案
- Zero Clipboard js+swf實(shí)現(xiàn)的復(fù)制功能使用方法
- JavaScript 復(fù)制功能代碼 兼容多瀏覽器
- js 復(fù)制功能 支持 for IE/FireFox/mozilla/ns
- js實(shí)現(xiàn)復(fù)制功能(多種方法集合)
相關(guān)文章
JavaScript實(shí)現(xiàn)一個(gè)空中避難的小游戲
最近利用Javascript實(shí)現(xiàn)了一個(gè)小游戲,覺(jué)著還不錯(cuò),所以分享給大家,下面這篇文章主要給大家介紹了利用JavaScript實(shí)現(xiàn)一個(gè)空中避難的小游戲的相關(guān)資料,文中給出了完整的示例代碼供大家參考學(xué)習(xí),需要的朋友們下面來(lái)一起看看吧。2017-06-06uniapp項(xiàng)目實(shí)踐之全局公共組件樣式及方法使用示例詳解
這篇文章主要為大家介紹了uniapp項(xiàng)目實(shí)踐之全局公共組件樣式及方法使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-09-09淺析基于WEB前端頁(yè)面的頁(yè)面內(nèi)容搜索的實(shí)現(xiàn)思路
本文主要是想實(shí)現(xiàn)瀏覽器的CTRL+F功能,提供個(gè)思路和代碼,需要的朋友可以參考下2014-06-06jquery實(shí)現(xiàn)的圖片點(diǎn)擊滾動(dòng)效果
這篇文章主要介紹了jquery實(shí)現(xiàn)的圖片點(diǎn)擊滾動(dòng)效果,需要的朋友可以參考下2014-04-04JavaScript Rxjs mergeMap 的使用場(chǎng)合
這篇文章主要介紹了JavaScript Rxjs mergeMap 的使用場(chǎng)合,mergeMap 接收一個(gè)函數(shù)作為輸入?yún)?shù),這個(gè)函數(shù)的輸入?yún)?shù)就是通過(guò) pipe 鏈接 mergeMap 的 Observable 里包含的元素2022-07-07echarts如何實(shí)現(xiàn)帶百分比的橫向柱狀圖
近期在使用echart開(kāi)發(fā)過(guò)程中遇到一些問(wèn)題,需要開(kāi)發(fā)橫向柱狀圖,下面這篇文章主要給大家介紹了關(guān)于echarts如何實(shí)現(xiàn)帶百分比的橫向柱狀圖的相關(guān)資料,需要的朋友可以參考下2021-12-12JavaScript如何向頁(yè)面中添加一個(gè)按鈕
這篇文章主要介紹了JavaScript如何向頁(yè)面中添加一個(gè)按鈕,使用兩種方式向頁(yè)面中添加一個(gè)按鈕,分別是appendChild()和innerHTML屬性,本文結(jié)合示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-10-10JavaScript實(shí)現(xiàn)搜索框的自動(dòng)完成功能(一)
在很多需要搜索的網(wǎng)站, 都會(huì)有一個(gè)自動(dòng)完成的搜索框. 方便用戶查找他們想要的搜索詞. 幫助用戶快速找到自己想要的結(jié)果.接下來(lái)通過(guò)本文給大家介紹JavaScript實(shí)現(xiàn)搜索框的自動(dòng)完成功能(一),需要的朋友參考下吧2016-02-02