禁用页面部分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 相关文章推荐
20个非常有用的PHP类库 加速php开发
Jan 15 Javascript
离开页面时检测表单元素是否被修改,提示保存的js代码
Aug 25 Javascript
JavaScript中判断整字类型最简洁的实现方法
Nov 08 Javascript
jQuery插件fullPage.js实现全屏滚动效果
Dec 02 Javascript
浅谈Javascript中的Label语句
Dec 14 Javascript
详解Angular的双向数据绑定(MV-VM)
Dec 26 Javascript
javascript简写常用的12个技巧(可以大大减少你的js代码量)
Mar 28 Javascript
详解vue中使用express+fetch获取本地json文件
Oct 10 Javascript
JavaScript通过mouseover()实现图片变大效果的示例
Dec 20 Javascript
Angular6项目打包优化的实现方法
Dec 15 Javascript
Vue 请求传公共参数的操作
Jul 31 Javascript
Element-ui 自带的两种远程搜索(模糊查询)用法讲解
Jan 29 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
自动把纯文本转换成Web页面的php代码
2009/08/27 PHP
解析PHP函数array_flip()在重复数组元素删除中的作用
2013/06/27 PHP
yii2简单使用less代替css示例
2017/03/10 PHP
PHP编程文件处理类SplFileObject和SplFileInfo用法实例分析
2017/07/22 PHP
关于document.cookie的使用javascript
2010/10/29 Javascript
Iframe自适应高度绝对好使的代码 兼容IE,遨游,火狐
2011/01/27 Javascript
基于jQuery的遍历同id元素 并响应事件的代码
2012/06/14 Javascript
JS实现IE状态栏文字缩放效果代码
2015/10/24 Javascript
Javascript基于对象三大特性(封装性、继承性、多态性)
2016/01/04 Javascript
利用JS轻松实现获取表单数据
2016/12/06 Javascript
微信小程序技巧之show内容展示,上传文件编码问题
2017/01/23 Javascript
easyui-edatagrid.js实现回车键结束编辑功能的实例
2017/04/12 Javascript
Vue3.0结合bootstrap创建多页面应用
2019/05/28 Javascript
JS实现可视化音频效果的实例代码
2020/01/16 Javascript
Python学习之Django的管理界面代码示例
2018/02/10 Python
基于DataFrame改变列类型的方法
2018/07/25 Python
利用Python将文本中的中英文分离方法
2018/10/31 Python
python递归下载文件夹下所有文件
2019/08/31 Python
浅谈opencv自动光学检测、目标分割和检测(连通区域和findContours)
2020/06/04 Python
大专生自我鉴定范文
2013/10/01 职场文书
挂职自我鉴定
2014/02/26 职场文书
资源工程专业毕业生求职信
2014/02/27 职场文书
工作建议书范文
2014/05/13 职场文书
产品包装策划方案
2014/05/18 职场文书
2014年安全管理工作总结
2014/12/01 职场文书
会计出纳岗位职责
2015/03/31 职场文书
2015年乡镇统计工作总结
2015/04/22 职场文书
大学学生会辞职信
2015/05/13 职场文书
安全生产标语口号
2015/12/26 职场文书
执行力心得体会范文
2016/01/11 职场文书
《藏戏》教学反思
2016/02/23 职场文书
毕业季聚会祝酒词!
2019/07/04 职场文书
对Golang中的FORM相关字段理解
2021/05/02 Golang
简单且有用的Python数据分析和机器学习代码
2021/07/02 Python
php双向队列实例讲解
2021/11/17 PHP
在CSS中使用when/else的方法
2022/01/18 HTML / CSS