禁用页面部分JavaScript方法的具体实现


Posted in Javascript onJuly 31, 2013

本文讨论的方法本人并没有在实际项目中应用过,因为我还没有遇到有这样需要的项目,但试验发现可行。

一、我的想法来源

JavaScipt是好东西,它的出现让网页页面表现形式更活泼,当然好处绝不仅仅就这些,而近些年来红红火火的AJAX应用更让人开始重视JavaScipt小语言(好些程序牛人不把它看作语言,最多是脚本称号,甚至看不起搞脚本的人)的应用。现在好些博客官网开放脚本权限,允许用户自定义脚本来丰富自己的空间,特别像一些技术类专业博客,提供了相当宽松的开发环境。但是我们也发现好些博客会对某些脚本方法作限制。注意,我这里说的是部分限制,如果是全部限制那是很简单的事,直接把<script>脚本块过滤掉就行了,但是部分限制又是如何做到的呢?

因为我在之前的项目中没有遇到这样的问题,所以也没有作过多的深入研究,一开始只是凭感觉想到用“替换”方法。很显然这样的方法行不通,因为可能会出错。比如我要禁用alert方法,现有下面那段代码:

window.alert('Some message');

现在要让上面那段代码失效,只要让alert变一下就行了,比如把它全部改成大写ALERT,这样又肯定会报脚本错误的,但还是可以用try{}catch{}把ALERT包含起来,但这对禁用语包的识别又是一大难题,而且还会有这样的错误:把document.write('alert some message');中的alert也替换了。

后来我想到了方法重写,重写要禁用的方法,并让它什么也不做,结果证明真的可行,但并不知道是不是一个科学的方法,我拿出来与大家共同讨论一下。

二、具体实现

先看下面的代码,实现了对“alert”,“write”两个方法的禁用:

window.alert=function(){} 
document.write=function(){} window.alert('Alert some message'); 
document.write('Write some message');

看起来真的很简单,在实际应用的时候,把前面两行单独抽出来存在一个外部JS文件中,并在需要过滤JavaScript方法的页面先加载这个JS文件(也可以在用户编辑内容块的前一行加载这个脚本,这样之前的HTML块中我们管理员或网页制作者还是可以用将要被禁用的方法),这样之后调用被禁用的方法是不起作用的了。

注意:最后提醒一下,还要禁用部分DOM操作方法,比如remove()方法,因为用户可以用DOM的操作方法移除你一开始加载的那个JS文件。

Javascript 相关文章推荐
js表数据排序 sort table data
Feb 18 Javascript
JavaScript 语法集锦 脚本之家基础推荐
Nov 15 Javascript
JavaScript为对象原型prototype添加属性的两种方式
Aug 01 Javascript
JavaScript与Image加载事件(onload)、加载状态(complete)
Feb 14 Javascript
getElementByIdx_x js自定义getElementById函数
Jan 24 Javascript
js中scrollHeight,scrollWidth,scrollLeft,scrolltop等差别介绍
May 16 Javascript
jquery实现的网页自动播放声音
Apr 30 Javascript
D3.js实现雷达图的方法详解
Sep 22 Javascript
js中如何完美的解析数据
Mar 18 Javascript
node thread.sleep实现示例
Jun 20 Javascript
详解微信UnionID作用
May 15 Javascript
Nuxt.js 静态资源和打包的操作
Nov 06 Javascript
jquery 单引号和双引号的区别及使用注意
Jul 31 #Javascript
选择器中含有空格在使用示例及注意事项
Jul 31 #Javascript
在表单提交前进行验证的几种方式整理
Jul 31 #Javascript
cookie.js 加载顺序问题怎么才有效
Jul 31 #Javascript
ie8 不支持new Date(2012-11-10)问题的解决方法
Jul 31 #Javascript
JS实现QQ图片一闪一闪的效果小例子
Jul 31 #Javascript
javascript中直接写php代码的方法
Jul 31 #Javascript
You might like
数组与类使用PHP的可变变量名需要的注意的问题
2013/06/20 PHP
php selectradio和checkbox默认选择的实现方法详解
2013/06/29 PHP
PHP内核探索之解释器的执行过程
2015/12/22 PHP
用JavaScript将从数据库中读取出来的日期型格式化为想要的类型。
2009/08/15 Javascript
jquery text()要注意啦
2009/10/30 Javascript
javascript 程序库的比较(一)之DOM功能
2010/04/07 Javascript
js 获取计算后的样式写法及注意事项
2013/02/25 Javascript
javascript避免数字计算精度误差的方法详解
2014/03/05 Javascript
Jquery判断radio、selelct、checkbox是否选中及获取选中值方法总结
2015/04/15 Javascript
HTML5使用DeviceOrientation实现摇一摇功能
2015/06/05 Javascript
JavaScript声明变量名的语法规则
2015/07/10 Javascript
JavaScript判断按钮被点击的方法
2015/12/13 Javascript
jquery validate表单验证的基本用法入门
2016/01/18 Javascript
探索angularjs+requirejs全面实现按需加载的套路
2016/02/26 Javascript
点击页面任何位置隐藏div的实现方法
2016/09/05 Javascript
Vue.js框架路由使用方法实例详解
2017/08/25 Javascript
在一个页面实现两个zTree联动的方法
2017/12/20 Javascript
jquery树形插件zTree高级使用详解
2019/08/16 jQuery
React实现类似淘宝tab居中切换效果的示例代码
2020/06/02 Javascript
[50:27]OG vs LGD 2018国际邀请赛淘汰赛BO3 第一场 8.26
2018/08/30 DOTA
Python中的字符串操作和编码Unicode详解
2017/01/18 Python
python3.4控制用户输入与输出的方法
2018/10/17 Python
详解python中@的用法
2019/03/27 Python
Python将文字转成语音并读出来的实例详解
2019/07/15 Python
python数据预处理 :数据抽样解析
2020/02/24 Python
利用HTML5的新特点实现图片文件异步上传
2014/05/29 HTML / CSS
html5 div布局与table布局详解
2016/11/16 HTML / CSS
澳大利亚运动鞋零售商:The Athlete’s Foot
2018/11/04 全球购物
电气自动化大学生求职信
2013/10/16 职场文书
打架检讨书50字
2014/01/11 职场文书
人事档案接收函
2014/01/12 职场文书
2015年个人思想总结
2015/03/09 职场文书
任命通知范文
2015/04/21 职场文书
作息时间调整通知
2015/04/22 职场文书
Python线程池与GIL全局锁实现抽奖小案例
2022/04/13 Python
python使用shell脚本创建kafka连接器
2022/04/29 Python