JS应用之禁止抓屏、复制、打印


Posted in Javascript onFebruary 21, 2008

项目需要禁止抓屏、复制、打印的要求,复制、打印做起来可能顺手一点网上各种各样的脚本俯首皆是。但抓屏怎么禁止?PrintScreen是一个特殊的键,它是没有keyCode的键,所以onkeydown变得毫无用处。不过换一种思路的话可会更好,我们从粘贴板着手采取曲线救国策略。代码如下:
<script language="javascript">
window.setInterval("clipboardData.setData('text','')",100);
</script>
以上代码是每100毫秒清空一次粘贴板操作。当页面加载时脚本程序就开始自动执行。但这样有个弊端,不管网页被最小化还是怎么的只要这个窗口开着我们电脑所有的复制操作都无法进行(脚本一直在清空粘贴板),从某种意义上讲是达到预期效果了,但有些欠佳:(。

我们知道所有的控件都有onfocus和onblur事件,window窗口也不例外。我们通过利用这两个事件,只有在当前窗口处于活动状态时才执行清空操作,否则停止执行。代码如下:
    <script language="javascript">
var interval
window.onfocus=function(){interval=window.setInterval("clipboardData.setData('text','')",100);}
window.onblur=function(){window.clearInterval(interval);}
    </script>
这样就可以完美的解决这个问题。但对于不将截屏内容放入粘贴板的截屏程序来说此方法还是心有余而力不足的。
最新测试实践发现使用onfocus和onblur事件的方法也不尽如人意,当焦点指向程序页面内其他控件(即使Table)时,window将失去焦点从而触发onblur事件停止执行清空粘贴板命令,难道需要遍历所有控件为其onfocus和onblur绑定事件?有些迷茫与失望。
另window.onfocus只是document的onfocus,如果焦点在地址栏或菜单之类的地方onfocus也将失效。
仅以此文字记录自己半天时间研究JS的心得。

禁止打印只需将如果下样式代码放入程序即可(打印出的页面内容将为空白):
<style>@media print{body{display:none}}</style>

禁止复制、选择、右键菜单:
<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环境运行正常。

Javascript 相关文章推荐
javascript设计模式之工厂模式示例讲解
Mar 04 Javascript
input标签内容改变的触发事件介绍
Jun 18 Javascript
js鼠标点击图片实现随机变换图片的方法
Feb 16 Javascript
EasyUI中datagrid在ie下reload失败解决方案
Mar 09 Javascript
JS+CSS实现的漂亮渐变背景特效代码(6个渐变效果)
Mar 25 Javascript
knockoutjs动态加载外部的file作为component中的template数据源的实现方法
Sep 01 Javascript
基于Vue实现后台系统权限控制的示例代码
Aug 29 Javascript
分享5个小技巧让你写出更好的 JavaScript 条件语句
Oct 20 Javascript
vue动态绘制四分之三圆环图效果
Sep 03 Javascript
微信小程序如何通过用户授权获取手机号(getPhoneNumber)
Jan 21 Javascript
vue+elementUI动态增加表单项并添加验证的代码详解
Dec 17 Vue.js
原生JavaScript实现简单五子棋游戏
Jun 28 Javascript
js 调整select 位置的函数
Feb 21 #Javascript
js 替换
Feb 19 #Javascript
javascript replace方法与正则表达式
Feb 19 #Javascript
window.addeventjs事件驱动函数集合addEvent等
Feb 19 #Javascript
setAttribute 与 class冲突解决
Feb 17 #Javascript
setInterval 和 setTimeout会产生内存溢出
Feb 15 #Javascript
一个js封装的不错的选项卡效果代码
Feb 15 #Javascript
You might like
PHP中动态显示签名和ip原理
2007/03/28 PHP
thinkphp5修改view到根目录实例方法
2019/07/02 PHP
PHP设计模式(三)建造者模式Builder实例详解【创建型】
2020/05/02 PHP
用javascript连接access数据库的方法
2006/11/17 Javascript
jquery中通过父级查找进行定位示例
2013/06/28 Javascript
使用jQuery设置disabled属性与移除disabled属性
2014/08/21 Javascript
jQuery获取iframe的document对象的方法
2014/10/10 Javascript
JavaScript基础教程之alert弹出提示框实例
2014/10/16 Javascript
JQuery中绑定事件(bind())和移除事件(unbind())
2015/02/27 Javascript
JS根据浏览器窗口大小实时动态改变网页文字大小的方法
2016/02/25 Javascript
实例解析jQuery中proxy()函数的用法
2016/05/24 Javascript
JavaScript中的 attribute 和 jQuery中的 attr 方法浅析
2017/01/04 Javascript
说说Vue.js中的functional函数化组件的使用
2019/02/12 Javascript
微信小程序学习笔记之跳转页面、传递参数获得数据操作图文详解
2019/03/28 Javascript
js设计模式之单例模式原理与用法详解
2019/08/15 Javascript
JavaScript单线程和任务队列原理解析
2020/02/04 Javascript
[08:07]DOTA2每周TOP10 精彩击杀集锦vol.8
2014/06/25 DOTA
[02:31]《DAC最前线》之选手酒店现场花絮
2015/01/30 DOTA
[00:58]2016年国际邀请赛勇士令状宣传片
2016/06/01 DOTA
[23:18]Spirit vs Liquid Supermajor小组赛A组 BO3 第二场 6.2
2018/06/03 DOTA
[01:11:15]VGJ.S vs Secret 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
Python遍历numpy数组的实例
2018/04/04 Python
Python统计python文件中代码,注释及空白对应的行数示例【测试可用】
2018/07/25 Python
python 接收处理外带的参数方法
2018/12/03 Python
PyQt5实现五子棋游戏(人机对弈)
2020/03/24 Python
对Python 检查文件名是否规范的实例详解
2019/06/10 Python
Django Rest framework解析器和渲染器详解
2019/07/25 Python
python实现按关键字筛选日志文件
2019/12/24 Python
解决python多线程报错:AttributeError: Can't pickle local object问题
2020/04/08 Python
杰夫·班克斯男士服装网上商店:Jeff Banks
2019/10/24 全球购物
英国最好的包装供应商:Priory Direct
2019/12/17 全球购物
表扬信格式
2014/01/12 职场文书
《邮票齿孔的故事》教学反思
2014/02/22 职场文书
初二学习计划书范文
2014/04/27 职场文书
社区服务理念口号
2015/12/25 职场文书
Python 使用 Frame tkraise() 方法在 Tkinter 应用程序中的Frame之间切换
2022/04/24 Python