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 尚未实现错误解决办法
Nov 27 Javascript
JavaScript 获得选中文本内容的方法
Feb 15 Javascript
JavaScript 应用技巧集合[推荐]
Aug 30 Javascript
基于jQuery的消息提示插件之旅 DivAlert(三)
Apr 01 Javascript
改善用户体验的五款jQuery插件分享
May 22 Javascript
JS将表单导出成EXCEL的实例代码
Nov 11 Javascript
在css加载完毕后自动判断页面是否加入css或js文件
Sep 10 Javascript
Bootstrap创建可折叠的组件
Feb 23 Javascript
jQuery实现邮箱下拉列表自动补全功能
Sep 08 Javascript
jQuery如何防止Ajax重复提交
Oct 14 Javascript
js实现自定义进度条效果
Mar 15 Javascript
小程序实现左右来回滚动字幕效果
Dec 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和ACCESS写聊天室(四)
2006/10/09 PHP
php smarty函数扩展
2010/03/15 PHP
php采用curl实现伪造IP来源的方法
2014/11/21 PHP
PHP入门教程之使用Mysqli操作数据库的方法(连接,查询,事务回滚等)
2016/09/11 PHP
Thinkphp3.2简单解决多文件上传只上传一张的问题
2017/09/26 PHP
PDO::errorCode讲解
2019/01/28 PHP
PHP如何使用array_unshift()在数组开头插入元素
2020/09/01 PHP
jQuery 对象中的类数组操作
2009/04/27 Javascript
js 函数的执行环境和作用域链的深入解析
2009/11/01 Javascript
javascript 强制刷新页面的实现代码
2009/12/13 Javascript
javascript时间函数基础介绍
2013/03/28 Javascript
深入分析escape()、encodeURI()、encodeURIComponent()的区别及示例
2014/08/04 Javascript
jquery实现对联广告的方法
2015/02/05 Javascript
js中split和replace的用法实例
2015/02/28 Javascript
JS实现向表格行添加新单元格的方法
2015/03/30 Javascript
jquery判断至少有一个checkbox被选中的方法
2015/06/05 Javascript
JavaScript文本框脚本编写的注意事项
2016/01/25 Javascript
Vue2.X 通过AJAX动态更新数据
2018/07/17 Javascript
微信小程序中使用wxss加载图片并实现动画效果
2018/08/13 Javascript
BootStrap模态框闪退问题实例代码详解
2018/12/10 Javascript
js构造函数constructor和原型prototype原理与用法实例分析
2020/03/02 Javascript
vue实践---vue不依赖外部资源实现简单多语操作
2020/09/21 Javascript
vue+element UI实现树形表格
2020/12/29 Vue.js
[52:57]2014 DOTA2国际邀请赛中国区预选赛 LGD-CDEC VS HGT
2014/05/21 DOTA
[03:22]DSPL第一期精彩集锦:酷炫到底!
2014/11/07 DOTA
Python3搜索及替换文件中文本的方法
2015/05/22 Python
python 项目目录结构设置
2020/02/14 Python
python selenium操作cookie的实现
2020/03/18 Python
浅谈python 中的 type(), dtype(), astype()的区别
2020/04/09 Python
Python 通过正则表达式快速获取电影的下载地址
2020/08/17 Python
pycharm配置python 设置pip安装源为豆瓣源
2021/02/05 Python
威尔逊皮革:Wilsons Leather
2018/12/07 全球购物
语文教学感言
2014/02/06 职场文书
2015年个人工作总结报告
2015/04/25 职场文书
民事调解书范文
2015/05/20 职场文书
Oracle查看表空间使用率以及爆满解决方案详解
2022/07/23 Oracle