1. 程式人生 > >JS應用之禁止抓屏、複製、列印

JS應用之禁止抓屏、複製、列印

專案需要禁止抓屏、複製、列印的要求,複製、列印做起來可能順手一點網上各種各樣的指令碼俯首皆是。但抓屏怎麼禁止?PrintScreen是一個特殊的鍵,它是沒有keyCode的鍵,所以onkeydown變得毫無用處。不過換一種思路的話可會更好,我們從貼上板著手採取曲線救國策略。程式碼如下: 


以上程式碼是每100毫秒清空一次貼上板操作。當頁面載入時指令碼程式就開始自動執行。但這樣有個弊端,不管網頁被最小化還是怎麼的只要這個視窗開著我們電腦所有的複製操作都無法進行(指令碼一直在清空貼上板),從某種意義上講是達到預期效果了,但有些欠佳:(。 

我們知道所有的控制元件都有onfocus和onblur事件,window視窗也不例外。我們通過利用這兩個事件,只有在當前視窗處於活動狀態時才執行清空操作,否則停止執行。程式碼如下: 
<textarea cols="50" rows="15" name="code" class="javascript">&lt;mce:script language="javascript"&gt;&lt;!-- var interval window.onfocus=function(){interval=window.setInterval("clipboardData.setData('text','')",100);} window.onblur=function(){window.clearInterval(interval);} // --&gt;&lt;/mce:script&gt; </textarea>
這樣就可以完美的解決這個問題。但對於不將截圖內容放入貼上板的截圖程式來說此方法還是心有餘而力不足的。 
最新測試實踐發現使用onfocus和onblur事件的方法也不盡如人意,當焦點指向程式頁面內其他控制元件(即使Table)時,window將失去焦點從而觸發onblur事件停止執行清空貼上板命令,難道需要遍歷所有控制元件為其onfocus和onblur繫結事件?有些迷茫與失望。 
另window.onfocus只是document的onfocus,如果焦點在位址列或選單之類的地方onfocus也將失效。 
僅以此文字記錄自己半天時間研究JS的心得。 

禁止列印只需將如果下樣式程式碼放入程式即可(打印出的頁面內容將為空白): 
<style>@media print{body{display:none}}</style> 

禁止複製、選擇、右鍵選單: 




以上程式碼在IE6.0環境執行正常。