禁用页面部分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 相关文章推荐
JQuery优缺点分析说明
Jun 09 Javascript
JSON语法五大要素图文介绍
Dec 04 Javascript
网站404页面3秒后跳到首页的实例代码
Aug 16 Javascript
js综合应用实例简单的表格统计
Sep 03 Javascript
使用JavaScript的ActiveXObject对象检测应用程序是否安装的方法
Apr 15 Javascript
PhantomJS快速入门教程(服务器端的 JavaScript API 的 WebKit)
Aug 06 Javascript
基于d3.js实现实时刷新的折线图
Aug 03 Javascript
JS生成一维码(条形码)功能示例
Jan 19 Javascript
jQuery EasyUI window窗口使用实例代码
Dec 25 jQuery
新手快速入门微信小程序组件库 iView Weapp
Jun 24 Javascript
Layui实现数据表格默认全部显示(不要分页)
Oct 26 Javascript
Echarts在Taro微信小程序开发中的踩坑记录
Nov 09 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 memcache扩展的三种安装方法
2009/04/26 PHP
php array_filter除去数组中的空字符元素
2020/06/21 PHP
xss防御之php利用httponly防xss攻击
2014/03/21 PHP
用jquery写的菜单从左往右滑动出现
2014/04/11 Javascript
JS实现来回出现文字的状态栏特效代码
2015/10/31 Javascript
整理关于Bootstrap模态弹出框的慕课笔记
2017/03/29 Javascript
node.js+jQuery实现用户登录注册AJAX交互
2017/04/28 jQuery
简单谈谈require模块化jquery和angular的问题
2017/06/23 jQuery
vue权限路由实现的方法示例总结
2018/07/29 Javascript
JS实现textarea通过换行或者回车把多行数字分割成数组并且去掉数组中空的值
2018/10/29 Javascript
react组件基本用法示例小结
2020/04/27 Javascript
vue实现商品列表的添加删除实例讲解
2020/05/14 Javascript
js实现炫酷光感效果
2020/09/05 Javascript
[56:47]Ti4 循环赛第三日 iG vs Liquid
2014/07/12 DOTA
Python中方法链的使用方法
2016/02/23 Python
Django使用HttpResponse返回图片并显示的方法
2018/05/22 Python
如何使用Python自动控制windows桌面
2019/07/11 Python
Python简单处理坐标排序问题示例
2019/07/11 Python
Python编写带选项的命令行程序方法
2019/08/13 Python
virtualenv介绍及简明教程
2020/06/23 Python
Django多数据库联用实现方法解析
2020/11/12 Python
python 统计list中各个元素出现的次数的几种方法
2021/02/20 Python
HTML5 拖放功能实现代码
2016/07/14 HTML / CSS
苹果美国官方商城:Apple美国
2016/08/24 全球购物
SISLEY希思黎官方旗舰店:享誉全球的奢华植物美容品牌
2018/04/25 全球购物
美国一站式电动和手动工具商店:International Tool
2020/11/26 全球购物
初中生期末考试的自我评价
2013/12/17 职场文书
生物制药专业自我鉴定
2014/02/19 职场文书
党的作风建设心得体会
2014/10/22 职场文书
高校自主招生教师推荐信
2015/03/23 职场文书
2015年财务个人工作总结范文
2015/05/22 职场文书
催款函范文
2015/06/24 职场文书
Vue.js中v-for指令的用法介绍
2022/03/13 Vue.js
如何让你的Nginx支持分布式追踪详解
2022/07/07 Servers
JS高级程序设计之class继承重点详解
2022/07/07 Javascript
JS实现页面炫酷的时钟特效示例
2022/08/14 Javascript