javaScript復(fù)制功能調(diào)用實(shí)現(xiàn)方案
更新時(shí)間:2012年12月13日 11:13:13 作者:
說(shuō)到使用js實(shí)現(xiàn)點(diǎn)擊復(fù)制的功能,我下面想說(shuō)的方法也是和網(wǎng)上的大同小異的。js實(shí)現(xiàn)是很簡(jiǎn)單,最難的是兼容問(wèn)題,畢竟用IE以外的人還是有很多的
復(fù)制代碼 代碼如下:
驗(yàn)證碼:<input type="text" id="code"/> <input type="button" value="復(fù)制" onclick="fuzhi()">
<script type="text/javascript">
function fuzhi(){
var codeVal=jQuery("#code").val();
alert(codeVal);
if (navigator.userAgent.toLowerCase().indexOf('ie') > -1) { //IE瀏覽器
clipboardData.setData('Text', codeVal);
alert("已經(jīng)復(fù)制到剪切板");
} else {
prompt("請(qǐng)復(fù)制:", codeVal);
}
// window.clipboardData.setData("Text",jQuery("#code").val());
}
</script>
最近都沒(méi)有什心情去寫(xiě)博文,主要因?yàn)樾臒┑氖虑闈u漸多起來(lái)了。
哎!離題了,回到這篇文章了。說(shuō)到使用js實(shí)現(xiàn)點(diǎn)擊復(fù)制的功能,我下面想說(shuō)的方法也是和網(wǎng)上的大同小異的。js實(shí)現(xiàn)是很簡(jiǎn)單,最難的是兼容問(wèn)題,畢竟用IE以外的人還是有很多的。這里,我也是根據(jù)網(wǎng)上的相關(guān)資源總結(jié)一下方法。
方法一,逐一判別處理法
方法很簡(jiǎn)單也很容易懂,就是通過(guò)判斷客戶(hù)端瀏覽器類(lèi)別,來(lái)執(zhí)行不同的js代碼來(lái)實(shí)現(xiàn)復(fù)制功能。雖然從理論上來(lái)說(shuō),這樣是行得通得。但是,事實(shí)并沒(méi)有我們想得那么容易。因?yàn)槲覀儾⒉惶宄恍g覽器下js復(fù)制代碼的寫(xiě)法,至少我所知道的也就是IE和FF。
如果只是兼容IE和FF的話(huà),那么簡(jiǎn)單得多了。這里我使用一個(gè)網(wǎng)上比較有名的判斷IE核的方法,13字節(jié)法,這個(gè)也是我常用的。
復(fù)制代碼 代碼如下:
if("\v"=="v") {//13個(gè)字節(jié)
//這里是IE核,執(zhí)行的代碼,親測(cè)兼容IE8
}else{
//非IE核執(zhí)行代碼
}
這里我寫(xiě)個(gè)大概的實(shí)現(xiàn)復(fù)制的構(gòu)架,具體代碼我不粘上來(lái)的,網(wǎng)上可以很簡(jiǎn)單就找到,給大家參考
復(fù)制代碼 代碼如下:
function clipBoard(object){
//獲取object的值,即復(fù)制內(nèi)容
var copyTxt=document.getElementById(object).value;
//調(diào)用copy2Clipboar來(lái)實(shí)現(xiàn)瀏覽器,判斷及執(zhí)行代碼
if(copy2Clipboard(copyTxt)!= false){
alert('復(fù)制成功');
}
}
copy2Clipboard = function(txt){
if("\v"=="v"){
//IE瀏覽器執(zhí)行代碼
window.clipboardData.clearData();
window.clipboardData.setData("Text",txt);
return true;
}else if(navigator.userAgent.indexOf("Firefox")>0){
//Firefox瀏覽器
return true;
}else if(window.google && window.chrome){
//chrome瀏覽器
return true;
}else{
alert("瀏覽器不支持");
return false;
}
}
根據(jù)需要可以自行添加不同的判斷瀏覽器代碼,實(shí)現(xiàn)該瀏覽器下的復(fù)制功能。一般情況下,根據(jù)IE > FF > opera/chrome>其他,這樣的順序進(jìn)行判斷。
方法二,flash間接處理法
原理很簡(jiǎn)單,通過(guò)創(chuàng)建一個(gè)flash,將復(fù)制的內(nèi)容以變量的方式傳遞給flash,flash再將內(nèi)容復(fù)制到內(nèi)存中,這樣就實(shí)現(xiàn)了復(fù)制的功能。只要支持flash,按理上是可以兼容絕大部分的瀏覽器的,這個(gè)方法是我今天看到的,也測(cè)試驗(yàn)證了。
安裝及使用方法,可以在上面兩個(gè)網(wǎng)址上找到,E文版,中文版只有通過(guò)搜索去找咯!
這里我提供一下實(shí)現(xiàn)框架的簡(jiǎn)單版,這里有用到上面的實(shí)現(xiàn)方式。這里有修改的,根據(jù)官方版說(shuō)明方法,在單頁(yè)面很容易就能實(shí)現(xiàn)該功能,但是在實(shí)際應(yīng)用到某些CMS中,可能會(huì)遇到一些問(wèn)題。什么問(wèn)題呢?IE核頁(yè)面會(huì)彈出 “該頁(yè)面已終止”。原因很簡(jiǎn)單,就是js加載未完成就調(diào)用。竟然是IE的問(wèn)題,那么我們就可以使用判斷IE的方法,將IE獨(dú)立出來(lái),其他核就使用flash方法實(shí)現(xiàn)。
復(fù)制代碼 代碼如下:
function checkClient(object){//判斷瀏覽器
var copyTxt=document.getElementById(object).value; //獲取復(fù)制的內(nèi)容
if("v"!="v"){
//這里根據(jù)官方文檔設(shè)置
//這里設(shè)置flash位置,絕對(duì)相對(duì)都可以
ZeroClipboard.setMoviePath('ZeroClipboard.swf');
//創(chuàng)建一個(gè)復(fù)制對(duì)象
var clip = new ZeroClipboard.Client();
//設(shè)置手形
clip.setHandCursor(true);
//設(shè)置復(fù)制的內(nèi)容
clip.setText(copyTxt);
//設(shè)置觸發(fā)對(duì)象
>clip.glue('d_clip_button');
}
}
這里用于判斷是否為IE核,IE核將不使用flash處理法,直接使用復(fù)制機(jī)制
復(fù)制代碼 代碼如下:
//復(fù)制處理
function clipBoard(object){
var copyTxt=document.getElementById(object).value;
if(copy2Clipboard(copyTxt)!= false){
alert('復(fù)制成功');
}
}
copy2Clipboard = function(txt){
if("\v"=="v") { //判斷是否是IE瀏覽器
window.clipboardData.clearData();
window.clipboardData.setData("Text",txt);
return true;
}
else{ //非IE核直接返回
return true;
}
以上為第二種方法的最簡(jiǎn)單設(shè)置方法,將代碼放到<head></head>之間即可不管是第一種,還是第二種方法都要在需要復(fù)制的頁(yè)面上添加下面兩行代碼
設(shè)置復(fù)制內(nèi)容的文本域
復(fù)制代碼 代碼如下:
<input type="text" id="textinfo"
onmouseout="checkClient('textinfo')" value="復(fù)制的內(nèi)容" size="65"/>
設(shè)置觸發(fā)對(duì)象按鈕
復(fù)制代碼 代碼如下:
<div id="d_clip_button" onclick="copyCode('textinfo')">復(fù)制地址</div>
這是第二種方法才要添加的,設(shè)置檢測(cè)瀏覽器
復(fù)制代碼 代碼如下:
<script>checkClient('textinfo');</script>
寫(xiě)到這里,大概的步驟就是這樣了,其中還有些id的名稱(chēng)可以按需要修改。至少完整代碼,可以參考官方的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實(shí)現(xiàn)復(fù)制功能各瀏覽器支持情況實(shí)測(cè)
- Zero Clipboard js+swf實(shí)現(xiàn)的復(fù)制功能使用方法
- JavaScript 復(fù)制功能代碼 兼容多瀏覽器
- js 復(fù)制功能 支持 for IE/FireFox/mozilla/ns
- js實(shí)現(xiàn)復(fù)制功能(多種方法集合)
相關(guān)文章
window.onload和$(function(){})的區(qū)別介紹
window.onload和$(function(){})有什么區(qū)別。window.onload表示頁(yè)面加載完了后(包括dom和js),再執(zhí)行函數(shù)里面的內(nèi)容,感興趣的朋友可以了解下2013-10-10JavaScript DOM 學(xué)習(xí)第七章 表單的擴(kuò)展
這一章我會(huì)處理一個(gè)簡(jiǎn)單的W3C DOM腳本。他會(huì)幫助我們從一個(gè)新的角度來(lái)看待交互設(shè)計(jì)。2010-02-02JS中for循序中延遲加載動(dòng)態(tài)效果的具體實(shí)現(xiàn)
今天在做一個(gè)前端的效果的時(shí)候碰到一個(gè)棘手的問(wèn)題,就是實(shí)現(xiàn)一個(gè)動(dòng)態(tài)的圓柱效果,廢話(huà)不多少,直接上代碼2013-08-08