禁用页面部分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 相关文章推荐
在网页中控制wmplayer播放器
Jul 01 Javascript
用JavaScript对JSON进行模式匹配(Part 1-设计)
Jul 17 Javascript
JQuery扩展插件Validate 1 基本使用方法并打包下载
Sep 05 Javascript
javascript在网页中实现读取剪贴板粘贴截图功能
Jun 07 Javascript
jQuery子属性过滤选择器用法分析
Feb 10 Javascript
ztree获取选中节点时不能进入可视区域出现BUG如何解决
Dec 03 Javascript
如何在Angular.JS中接收并下载PDF
Nov 26 Javascript
jQuery实现select模糊查询(反射机制)
Jan 14 Javascript
vue.js的安装方法
May 12 Javascript
JavaScript中in和hasOwnProperty区别详解
Aug 04 Javascript
js匿名函数使用&amp;传参(实例)
Sep 08 Javascript
vue-router权限控制(简单方式)
Oct 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
php strtotime 函数UNIX时间戳
2009/01/14 PHP
PHP 解决utf-8和gb2312编码转换问题
2010/03/18 PHP
php gzip压缩输出的实现方法
2013/04/27 PHP
在Laravel5.6中使用Swoole的协程数据库查询
2018/06/15 PHP
php如何把表单内容提交到数据库
2019/07/08 PHP
鼠标经过显示二级菜单js特效
2013/08/13 Javascript
jquery如何判断某元素是否具备指定的样式
2013/11/05 Javascript
js 中将多个逗号替换为一个逗号的代码
2014/06/07 Javascript
AngularJS中的模块详解
2015/01/29 Javascript
jQuery解析XML与传统JavaScript方法的差别实例分析
2015/03/05 Javascript
javascript实现dom元素可拖动
2016/03/21 Javascript
用JavaScript动态建立或增加CSS样式表的实现方法
2016/05/20 Javascript
js实现百度搜索提示框
2017/02/05 Javascript
深入理解Angular4中的依赖注入
2017/06/07 Javascript
运用jQuery写的验证表单(实例讲解)
2017/07/06 jQuery
Bootstrap datepicker日期选择器插件使用详解
2017/07/26 Javascript
vue.js框架实现表单排序和分页效果
2017/08/09 Javascript
微信小程序如何再次获取用户授权的方法
2019/05/10 Javascript
微信小程序实现侧边分类栏
2019/10/21 Javascript
vue 路由懒加载中给 Webpack Chunks 命名的方法
2020/04/24 Javascript
react-native 实现购物车滑动删除效果的示例代码
2021/01/15 Javascript
将图片文件嵌入到wxpython代码中的实现方法
2014/08/11 Python
Python命令行解析模块详解
2018/02/01 Python
python如何把嵌套列表转变成普通列表
2018/03/20 Python
解决python中遇到字典里key值为None的情况,取不出来的问题
2018/10/17 Python
在Python中os.fork()产生子进程的例子
2019/08/08 Python
基于python traceback实现异常的获取与处理
2019/12/13 Python
Python之Django自动实现html代码(下拉框,数据选择)
2020/03/13 Python
受外贸欢迎的美国主机:BlueHost
2017/05/16 全球购物
XML文档面试题
2015/08/05 面试题
环境工程大学生自荐信
2013/10/21 职场文书
教师见习期自我鉴定
2014/04/28 职场文书
关于环保的活动方案
2014/08/25 职场文书
社区扶贫帮困工作总结
2015/05/20 职场文书
毕业实习感受与体会
2015/05/26 职场文书
中学政教处工作总结
2015/08/13 职场文书