禁用页面部分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表格控件(自写,网上没有的)
Jun 04 Javascript
JS实现很酷的水波文字特效实例
Feb 26 Javascript
以Python代码实例展示kNN算法的实际运用
Oct 26 Javascript
JavaScript中的ParseInt(&quot;08&quot;)和“09”返回0的原因分析及解决办法
May 19 Javascript
jQuery实现的选择商品飞入文本框动画效果完整实例
Aug 10 Javascript
JavaScript中对象的不同创建方法
Aug 12 Javascript
学习vue.js条件渲染
Dec 03 Javascript
JS实现点击拉拽轮播图pc端移动端适配
Sep 05 Javascript
使用ECharts实现状态区间图
Oct 25 Javascript
vue单页面在微信下只能分享落地页的解决方案
Apr 15 Javascript
微信小程序获取用户信息及手机号(后端TP5.0)
Sep 12 Javascript
解决Vue 刷新页面导航显示高亮位置不对问题
Dec 25 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命名空间(namespace)的动态访问及使用技巧
2014/08/18 PHP
ThinkPHP登录功能的实现方法
2014/08/20 PHP
初识php MVC
2014/09/10 PHP
php实现多维数组中每个单元值(数字)翻倍的方法
2015/02/16 PHP
php实现网站留言板功能
2015/11/04 PHP
Yii中CGridView实现批量删除的方法
2015/12/28 PHP
php版微信js-sdk支付接口类用法示例
2016/10/12 PHP
for 循环性能比较 提高for循环的效率
2009/03/19 Javascript
JavaScript类型检测之typeof 和 instanceof 的缺陷与优化
2016/01/13 Javascript
JavaScript与jQuery实现的闪烁输入效果
2016/02/18 Javascript
d3.js入门教程之数据绑定详解
2017/04/28 Javascript
jquery DataTable实现前后台动态分页
2017/06/17 jQuery
浅谈webpack打包之后的文件过大的解决方法
2018/03/07 Javascript
微信小程序scroll-view实现字幕滚动
2018/07/14 Javascript
js实现搜索栏效果
2018/11/16 Javascript
Vue keepAlive 数据缓存工具实现返回上一个页面浏览的位置
2019/05/10 Javascript
微信小程序自定义胶囊样式
2020/12/27 Javascript
pycharm 使用心得(八)如何调用另一文件中的函数
2014/06/06 Python
浅析Python中的多进程与多线程的使用
2015/04/07 Python
Python文件右键找不到IDLE打开项解决办法
2015/06/08 Python
学习python 之编写简单乘法运算题
2016/02/27 Python
Python for Informatics 第11章之正则表达式(四)
2016/04/21 Python
python的继承知识点总结
2018/12/10 Python
pyshp创建shp点文件的方法
2018/12/31 Python
解决Pyinstaller 打包exe文件 取消dos窗口(黑框框)的问题
2019/06/21 Python
Python使用Pandas对csv文件进行数据处理的方法
2019/08/01 Python
Python 实现OpenCV格式和PIL.Image格式互转
2020/01/09 Python
解决Keyerror ''acc'' KeyError: ''val_acc''问题
2020/06/18 Python
Python 基于jwt实现认证机制流程解析
2020/06/22 Python
python写文件时覆盖原来的实例方法
2020/07/22 Python
草莓网化妆品澳大利亚站:Strawberrynet AU
2017/12/18 全球购物
公司综合部的成员自我评价分享
2013/11/05 职场文书
人身损害赔偿协议书格式
2014/11/01 职场文书
档案管理员岗位职责
2015/02/12 职场文书
会计主管竞聘书
2015/09/15 职场文书
react国际化react-intl的使用
2021/05/06 Javascript