禁用页面部分JavaScript不是全部而是部分


Posted in Javascript onSeptember 03, 2014

本文讨论的方法本人并没有在实际项目中应用过,因为我还没有遇到有这样需要的项目,但试验发现可行。

一、我的想法来源

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 相关文章推荐
ASP中用Join和Array,可以加快字符连接速度的代码
Aug 22 Javascript
传智播客学习之JavaScript基础篇
Nov 13 Javascript
JavaScript中各种编码解码函数的区别和注意事项
Aug 19 Javascript
ie8本地图片上传预览示例代码
Jan 12 Javascript
JavaScript输出所选择起始与结束日期的方法
Jul 12 Javascript
JS实现的简单表单验证功能示例
Oct 13 Javascript
JavaScript累加、迭代、穷举、递归等常用算法实例小结
May 08 Javascript
vue props传值失败 输出undefined的解决方法
Sep 11 Javascript
使用js实现一个简单的滚动条过程解析
Sep 10 Javascript
layui实现form表单同时提交数据和文件的代码
Oct 25 Javascript
Vue中keep-alive组件的深入理解
Aug 23 Javascript
Vue实现小购物车功能
Dec 21 Vue.js
让JavaScript的Alert弹出框失效的方法禁止弹出警告框
Sep 03 #Javascript
JavaScript使用focus()设置焦点失败的解决方法
Sep 03 #Javascript
javascript实现浏览器窗口传递参数的方法
Sep 03 #Javascript
javascript模拟post提交隐藏地址栏的参数
Sep 03 #Javascript
javascript刷新父页面的各种方法汇总
Sep 03 #Javascript
判断在css加载完毕后执行后续代码示例
Sep 03 #Javascript
jQuery实现倒计时按钮功能代码分享
Sep 03 #Javascript
You might like
使用PHP获取网络文件的实现代码
2010/01/01 PHP
PHP去掉从word直接粘贴过来的没有用格式的函数
2012/10/29 PHP
PHP无限分类(树形类)
2013/09/28 PHP
PHP的关于变量和日期处理的一些面试题目整理
2015/08/10 PHP
javascript onkeydown,onkeyup,onkeypress,onclick,ondblclick
2009/02/04 Javascript
编写自己的jQuery插件简单实现代码
2011/04/19 Javascript
js动态添加事件并可传参数示例代码
2013/10/21 Javascript
jQuery插件之Tocify动态节点目录菜单生成器附源码下载
2016/01/08 Javascript
从零学习node.js之简易的网络爬虫(四)
2017/02/22 Javascript
jQuery.cookie.js使用方法及相关参数解释
2017/03/06 Javascript
Vue.js实现文章评论和回复评论功能
2020/05/30 Javascript
jQuery 添加样式属性的优先级别方法(推荐)
2017/06/08 jQuery
webpack-dev-server远程访问配置方法
2018/02/22 Javascript
vue2.0在没有dev-server.js下的本地数据配置方法
2018/02/23 Javascript
JavaScript 日期时间选择器一些小结
2018/04/02 Javascript
React 无状态组件(Stateless Component) 与高阶组件
2018/08/14 Javascript
深入Node TCP模块的理解
2019/03/13 Javascript
小程序实现订单倒计时功能
2019/04/23 Javascript
关于Node.js中频繁修改代码重启服务器的问题
2020/10/15 Javascript
[01:28]一分钟告诉你DOTA2 TI9不朽宝藏Ⅱ中有什么!
2019/07/09 DOTA
Python 爬虫学习笔记之单线程爬虫
2016/09/21 Python
在Pycharm中项目解释器与环境变量的设置方法
2018/10/29 Python
基于树莓派的语音对话机器人
2019/06/17 Python
在Qt5和PyQt5中设置支持高分辨率屏幕自适应的方法
2019/06/18 Python
DJango的创建和使用详解(默认数据库sqlite3)
2019/11/18 Python
Pycharm最新激活码2019(推荐)
2019/12/31 Python
python 视频下载神器(you-get)的具体使用
2021/01/06 Python
基于CSS3实现图片模糊过滤效果
2015/11/19 HTML / CSS
工作自荐信
2013/12/11 职场文书
《这儿真好》教学反思
2014/02/22 职场文书
基层党建工作汇报材料
2014/08/15 职场文书
长征观后感
2015/06/09 职场文书
鉴史问廉观后感
2015/06/10 职场文书
幼儿园开学家长寄语(2016春季)
2015/12/03 职场文书
Python学习之时间包使用教程详解
2022/03/21 Python
TypeScript实用技巧 Nominal Typing名义类型详解
2022/09/23 Javascript