禁用页面部分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 相关文章推荐
javascript web对话框与弹出窗口
Feb 22 Javascript
将光标定位于输入框最右侧实现代码
Dec 04 Javascript
JS替换文本域内的回车示例
Feb 18 Javascript
js实现的捐赠管理完整实例
Jan 20 Javascript
JavaScript中实现继承的三种方式和实例
Jan 29 Javascript
jquery实现无限分级横向导航菜单的方法
Mar 12 Javascript
javascript实现给定半径求出圆的面积
Jun 26 Javascript
跟我学习javascript的循环
Nov 18 Javascript
AngularJS表达式讲解及示例代码
Aug 16 Javascript
jquery PrintArea 实现票据的套打功能(代码)
Mar 17 Javascript
vue2.0项目集成Cesium的实现方法
Jul 30 Javascript
vue created钩子函数与mounted钩子函数的用法区别
Nov 05 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
一个改进的UBB类
2006/10/09 PHP
基于php权限分配的实现代码
2013/04/28 PHP
javascript字符串拼接的效率问题
2010/12/25 Javascript
改进UCHOME的记录发布,增强可访问性用户体验
2011/01/17 Javascript
跨域请求之jQuery的ajax jsonp的使用解惑
2011/10/09 Javascript
CheckBoxList多选样式jquery、C#获取选择项
2013/09/06 Javascript
Jquery在指定DIV加载HTML示例代码
2014/02/17 Javascript
node.js中的fs.chmod方法使用说明
2014/12/18 Javascript
javascript中mouseover、mouseout使用详解
2015/07/19 Javascript
jQuery插件实现文件上传功能(支持拖拽)
2020/08/27 Javascript
全面了解addEventListener和on的区别
2016/07/14 Javascript
React组件之间的通信的实例代码
2017/06/27 Javascript
js如何编写简单的ajax方法库
2017/08/02 Javascript
web前端页面生成exe可执行文件的方法
2018/02/08 Javascript
vue实现商品加减计算总价的实例代码
2018/08/12 Javascript
angularJs在多个控制器中共享服务数据的方法
2018/09/30 Javascript
wx-charts 微信小程序图表插件的具体使用
2019/08/18 Javascript
node.js +mongdb实现登录功能
2020/06/18 Javascript
JavaScript代码简化技巧实例解析
2020/09/09 Javascript
微信小程序自定义yPicker组件实现省市区三级联动功能
2020/10/29 Javascript
[53:49]LGD vs Fnatic 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
python中闭包Closure函数作为返回值的方法示例
2017/12/17 Python
使用TensorFlow实现简单线性回归模型
2019/07/19 Python
解决python 3 urllib 没有 urlencode 属性的问题
2019/08/22 Python
使用python计算三角形的斜边例子
2020/04/15 Python
java字符串格式化输出实例讲解
2021/01/06 Python
18-35岁旅游团的全球领导者:Contiki
2017/02/08 全球购物
奇怪的鱼:Weird Fish
2018/03/18 全球购物
巴黎卡诗加拿大官网:Kérastase加拿大
2018/11/12 全球购物
上海奥佳笔试题面试题
2016/11/16 面试题
JDBC操作数据库的基本流程是什么
2014/10/28 面试题
电气工程及其自动化自我评价四篇
2013/09/24 职场文书
党的群众路线教育实践活动宣传标语口号
2014/06/06 职场文书
文化大革命观后感
2015/06/17 职场文书
详解如何使用Node.js实现热重载页面
2021/05/06 Javascript
总结Python连接CS2000的详细步骤
2021/06/23 Python