JS應(yīng)用之禁止抓屏、復(fù)制、打印
更新時(shí)間:2008年02月21日 21:34:02 作者:
js 禁止復(fù)制js 復(fù)制js 禁止右鍵 復(fù)制文件js 禁止 js禁止選擇 js禁止右鍵代碼
項(xiàng)目需要禁止抓屏、復(fù)制、打印的要求,復(fù)制、打印做起來(lái)可能順手一點(diǎn)網(wǎng)上各種各樣的腳本俯首皆是。但抓屏怎么禁止?PrintScreen是一個(gè)特殊的鍵,它是沒(méi)有keyCode的鍵,所以onkeydown變得毫無(wú)用處。不過(guò)換一種思路的話可會(huì)更好,我們從粘貼板著手采取曲線救國(guó)策略。代碼如下:
<script language="javascript">
window.setInterval("clipboardData.setData('text','')",100);
</script>
以上代碼是每100毫秒清空一次粘貼板操作。當(dāng)頁(yè)面加載時(shí)腳本程序就開(kāi)始自動(dòng)執(zhí)行。但這樣有個(gè)弊端,不管網(wǎng)頁(yè)被最小化還是怎么的只要這個(gè)窗口開(kāi)著我們電腦所有的復(fù)制操作都無(wú)法進(jìn)行(腳本一直在清空粘貼板),從某種意義上講是達(dá)到預(yù)期效果了,但有些欠佳:(。
我們知道所有的控件都有onfocus和onblur事件,window窗口也不例外。我們通過(guò)利用這兩個(gè)事件,只有在當(dāng)前窗口處于活動(dòng)狀態(tài)時(shí)才執(zhí)行清空操作,否則停止執(zhí)行。代碼如下:
<script language="javascript">
var interval
window.onfocus=function(){interval=window.setInterval("clipboardData.setData('text','')",100);}
window.onblur=function(){window.clearInterval(interval);}
</script>
這樣就可以完美的解決這個(gè)問(wèn)題。但對(duì)于不將截屏內(nèi)容放入粘貼板的截屏程序來(lái)說(shuō)此方法還是心有余而力不足的。
最新測(cè)試實(shí)踐發(fā)現(xiàn)使用onfocus和onblur事件的方法也不盡如人意,當(dāng)焦點(diǎn)指向程序頁(yè)面內(nèi)其他控件(即使Table)時(shí),window將失去焦點(diǎn)從而觸發(fā)onblur事件停止執(zhí)行清空粘貼板命令,難道需要遍歷所有控件為其onfocus和onblur綁定事件?有些迷茫與失望。
另window.onfocus只是document的onfocus,如果焦點(diǎn)在地址欄或菜單之類(lèi)的地方onfocus也將失效。
僅以此文字記錄自己半天時(shí)間研究JS的心得。
禁止打印只需將如果下樣式代碼放入程序即可(打印出的頁(yè)面內(nèi)容將為空白):
<style>@media print{body{display:none}}</style>
禁止復(fù)制、選擇、右鍵菜單:
<script language=javascript>
function click() {
return false;}
function click1(){if (event.button==2) {return false; }}
function CtrlKeyDown(){
if (event.keyCode==67&&event.ctrlKey)
{
clipboardData.setData('text','');
return false;
}
}
document.onkeydown=CtrlKeyDown;
document.onselectstart=click;
document.onmousedown=click1;
</script>
<noscript><iframe src=*.html></iframe></noscript>
<script language=javascript>
<!--
if (window.Event)
document.captureEvents(Event.MOUSEUP);
function nocontextmenu(){
event.cancelBubble = true
event.returnValue = false;
return false;
}
function norightclick(e){
if (window.Event){
if (e.which == 2 || e.which == 3)
return false;
}
else if (event.button == 2 || event.button == 3)
{
event.cancelBubble = true;
event.returnValue = false;return false;}
}
document.oncontextmenu = nocontextmenu; // for IE5+
document.onmousedown = norightclick; // for all others
//--></script>
以上代碼在IE6.0環(huán)境運(yùn)行正常。
<script language="javascript">
window.setInterval("clipboardData.setData('text','')",100);
</script>
以上代碼是每100毫秒清空一次粘貼板操作。當(dāng)頁(yè)面加載時(shí)腳本程序就開(kāi)始自動(dòng)執(zhí)行。但這樣有個(gè)弊端,不管網(wǎng)頁(yè)被最小化還是怎么的只要這個(gè)窗口開(kāi)著我們電腦所有的復(fù)制操作都無(wú)法進(jìn)行(腳本一直在清空粘貼板),從某種意義上講是達(dá)到預(yù)期效果了,但有些欠佳:(。
我們知道所有的控件都有onfocus和onblur事件,window窗口也不例外。我們通過(guò)利用這兩個(gè)事件,只有在當(dāng)前窗口處于活動(dòng)狀態(tài)時(shí)才執(zhí)行清空操作,否則停止執(zhí)行。代碼如下:
<script language="javascript">
var interval
window.onfocus=function(){interval=window.setInterval("clipboardData.setData('text','')",100);}
window.onblur=function(){window.clearInterval(interval);}
</script>
這樣就可以完美的解決這個(gè)問(wèn)題。但對(duì)于不將截屏內(nèi)容放入粘貼板的截屏程序來(lái)說(shuō)此方法還是心有余而力不足的。
最新測(cè)試實(shí)踐發(fā)現(xiàn)使用onfocus和onblur事件的方法也不盡如人意,當(dāng)焦點(diǎn)指向程序頁(yè)面內(nèi)其他控件(即使Table)時(shí),window將失去焦點(diǎn)從而觸發(fā)onblur事件停止執(zhí)行清空粘貼板命令,難道需要遍歷所有控件為其onfocus和onblur綁定事件?有些迷茫與失望。
另window.onfocus只是document的onfocus,如果焦點(diǎn)在地址欄或菜單之類(lèi)的地方onfocus也將失效。
僅以此文字記錄自己半天時(shí)間研究JS的心得。
禁止打印只需將如果下樣式代碼放入程序即可(打印出的頁(yè)面內(nèi)容將為空白):
<style>@media print{body{display:none}}</style>
禁止復(fù)制、選擇、右鍵菜單:
<script language=javascript>
function click() {
return false;}
function click1(){if (event.button==2) {return false; }}
function CtrlKeyDown(){
if (event.keyCode==67&&event.ctrlKey)
{
clipboardData.setData('text','');
return false;
}
}
document.onkeydown=CtrlKeyDown;
document.onselectstart=click;
document.onmousedown=click1;
</script>
<noscript><iframe src=*.html></iframe></noscript>
<script language=javascript>
<!--
if (window.Event)
document.captureEvents(Event.MOUSEUP);
function nocontextmenu(){
event.cancelBubble = true
event.returnValue = false;
return false;
}
function norightclick(e){
if (window.Event){
if (e.which == 2 || e.which == 3)
return false;
}
else if (event.button == 2 || event.button == 3)
{
event.cancelBubble = true;
event.returnValue = false;return false;}
}
document.oncontextmenu = nocontextmenu; // for IE5+
document.onmousedown = norightclick; // for all others
//--></script>
以上代碼在IE6.0環(huán)境運(yùn)行正常。
您可能感興趣的文章:
- js實(shí)現(xiàn)頁(yè)面打印功能實(shí)例代碼(附去頁(yè)眉頁(yè)腳功能代碼)
- javascript 打印內(nèi)容方法小結(jié)
- js控制web打印(局部打印)方法整理
- js如何打印object對(duì)象
- javascript打印大全(打印頁(yè)面設(shè)置/打印預(yù)覽代碼)
- js或jquery實(shí)現(xiàn)頁(yè)面打印可局部打印
- 用javascript實(shí)現(xiàn)頁(yè)面打印的三種方法
- JS 打印功能代碼可實(shí)現(xiàn)打印預(yù)覽、打印設(shè)置等
- javascript下用ActiveXObject控件替換word書(shū)簽,將內(nèi)容導(dǎo)出到word后打印
- JS打印組合功能
相關(guān)文章
js實(shí)現(xiàn)的星星評(píng)分功能函數(shù)
這篇文章主要介紹了js實(shí)現(xiàn)的星星評(píng)分功能函數(shù),涉及JavaScript響應(yīng)鼠標(biāo)事件實(shí)現(xiàn)針對(duì)頁(yè)面元素的遍歷與樣式屬性的修改技巧,非常簡(jiǎn)單實(shí)用的代碼,需要的朋友可以參考下2015-12-12
JS實(shí)現(xiàn)的數(shù)字格式化功能示例
這篇文章主要介紹了JS實(shí)現(xiàn)的數(shù)字格式化功能,結(jié)合實(shí)例形式分析了javascript針對(duì)數(shù)字與字符的相關(guān)運(yùn)算處理技巧,需要的朋友可以參考下2017-02-02
JavaScript中的16進(jìn)制字符(改進(jìn))
后來(lái)經(jīng)過(guò)自己的測(cè)試,發(fā)現(xiàn)將字符轉(zhuǎn)換為十六進(jìn)制的方法不完善。2011-11-11
JavaScript中的惰性載入函數(shù)及優(yōu)勢(shì)
這篇文章主要介紹了JavaScript中的惰性載入函數(shù)及優(yōu)勢(shì),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-02-02
DIV+CSS+JS不間斷橫向滾動(dòng)實(shí)現(xiàn)代碼
不間斷橫向滾動(dòng)想必大家在很多場(chǎng)合都有見(jiàn)過(guò)吧,本文也使用DIV+CSS+JS實(shí)現(xiàn)一個(gè),感興趣的你可以參考下哈,希望對(duì)你學(xué)習(xí)有所幫助2013-03-03
JS實(shí)現(xiàn)圖片幻燈片效果代碼實(shí)例
這篇文章主要介紹了JS實(shí)現(xiàn)圖片幻燈片效果代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-05-05

