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 相关文章推荐
jquery 常用操作整理 基础入门篇
Oct 14 Javascript
JavaScript 判断指定字符串是否为有效数字
May 11 Javascript
JS随机生成不重复数据的实例方法
Jul 17 Javascript
用JavaScript实现使用鼠标画线的示例代码
Aug 19 Javascript
js实现模拟银行卡账号输入显示效果
Nov 18 Javascript
vue interceptor 使用教程实例详解
Sep 13 Javascript
js中获取URL参数的共用方法getRequest()方法实例详解
Oct 24 Javascript
详解Vue之父子组件传值
Apr 01 Javascript
javascript的this关键字详解
May 20 Javascript
vue使用localStorage保存登录信息 适用于移动端、PC端
May 27 Javascript
JavaScript canvas实现跟随鼠标移动小球
Feb 09 Javascript
JavaScript parseInt0.0000005打印5原理解析
Jul 23 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执行linux系统命令的常用函数使用说明
2010/04/27 PHP
解决PHP4.0 和 PHP5.0类构造函数的兼容问题
2013/08/01 PHP
PHP函数实现分页含文本分页和数字分页
2014/10/23 PHP
php判断两个日期之间相差多少个月份的方法
2015/06/18 PHP
PHP读取zip文件的方法示例
2016/11/17 PHP
才发现的超链接js导致网页中GIF动画停止的解决方法
2007/11/02 Javascript
jQuery 解析xml文件
2009/08/09 Javascript
表格 隔行换色升级版
2009/11/07 Javascript
javascript中的关于类型转换的性能优化
2010/12/14 Javascript
ActiveX控件与Javascript之间的交互示例
2014/06/04 Javascript
jQuery控制TR显示隐藏的几种方法
2014/06/18 Javascript
js实现大转盘抽奖游戏实例
2015/06/24 Javascript
ajax异步请求详解
2017/01/06 Javascript
BootStrap表单验证 FormValidation 调整反馈图标位置的实例代码
2017/05/17 Javascript
详解Angular2表单-模板驱动的表单(Template-Driven Forms)
2017/08/04 Javascript
jQuery 禁止表单用户名、密码自动填充功能
2017/10/30 jQuery
vue实现图片滚动的示例代码(类似走马灯效果)
2018/03/03 Javascript
jQuery中的$是什么意思及 $. 和 $().的区别
2018/04/20 jQuery
vue.js表单验证插件(vee-validate)的使用教程详解
2019/05/23 Javascript
JS中==、===你分清楚了吗
2020/03/04 Javascript
jQuery插件实现图片轮播效果
2020/10/19 jQuery
Vue +WebSocket + WaveSurferJS 实现H5聊天对话交互的实例
2020/11/18 Vue.js
Python 字符串操作实现代码(截取/替换/查找/分割)
2013/06/08 Python
Python中字典的setdefault()方法教程
2017/02/07 Python
Python中str is not callable问题详解及解决办法
2017/02/10 Python
python dataframe astype 字段类型转换方法
2018/04/11 Python
python 创建一个空dataframe 然后添加行数据的实例
2018/06/07 Python
正确理解Python中if __name__ == '__main__'
2019/01/24 Python
搞定这套Python爬虫面试题(面试会so easy)
2019/04/03 Python
pytorch模型预测结果与ndarray互转方式
2020/01/15 Python
使用 tf.nn.dynamic_rnn 展开时间维度方式
2020/01/21 Python
python实现最速下降法
2020/03/24 Python
3D动画《斗罗大陆》上线当日播放过亿
2021/03/16 国漫
领先的荷兰线上超市:荷兰之家Holland at Home(支持中文)
2021/01/21 全球购物
给医务人员表扬信
2014/01/12 职场文书
婚前协议书范本
2014/04/15 职场文书