禁用页面部分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 相关文章推荐
在JavaScript中用getMinutes()方法返回指定的分时刻
Jun 10 Javascript
jquery实现可横向和竖向展开的动态下滑菜单效果
Aug 24 Javascript
前端性能优化及技巧
May 06 Javascript
Javascript之面向对象--接口
Dec 02 Javascript
微信小程序 仿猫眼实现实例代码
Mar 14 Javascript
js 索引下标之li集合绑定点击事件
Jan 12 Javascript
echarts实现词云自定义形状的示例代码
Feb 20 Javascript
这样回答继承可能面试官更满意
Dec 10 Javascript
vue分页插件的使用方法
Dec 25 Javascript
Jquery使用each函数实现遍历及数组处理
Jul 14 jQuery
js实现拖拽元素选择和删除
Aug 25 Javascript
JavaScript的一些小技巧分享
Jan 06 Javascript
让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
检测png图片是否完整的php代码
2010/09/06 PHP
PHP常用的三种设计模式汇总
2016/08/28 PHP
php array_multisort 对数组进行排序详解及实例代码
2016/10/27 PHP
PHP中快速生成随机密码的几种方式
2017/04/17 PHP
PHP API接口必备之输出json格式数据示例代码
2017/06/27 PHP
javascript转换字符串为dom对象(字符串动态创建dom)
2010/05/10 Javascript
javascript中substr,substring,slice.splice的区别说明
2010/11/25 Javascript
解决ExtJS在chrome或火狐中正常显示在ie中不显示的浏览器兼容问题
2013/01/11 Javascript
document.getElementById获取控件对象为空的解决方法
2013/11/20 Javascript
jquery使用jquery.zclip插件复制对象的实例教程
2013/12/04 Javascript
js中匿名函数的创建与调用方法分析
2014/12/19 Javascript
详解AngularJS中的作用域
2015/06/17 Javascript
基于insertBefore制作简单的循环插空效果
2015/09/21 Javascript
第九章之路径分页标签与徽章组件
2016/04/25 Javascript
Node.js的Web模板引擎ejs的入门使用教程
2016/06/06 Javascript
JavaScript实战(原生range和自定义特效)简单实例
2016/08/21 Javascript
详解使用路由延迟加载 Angular 模块
2017/10/12 Javascript
js判断输入框不能为空格或null值的实现方法
2018/03/02 Javascript
原生JS实现的碰撞检测功能示例
2018/05/18 Javascript
vue打包的时候自动将px转成rem的操作方法
2018/06/20 Javascript
vue 框架下自定义滚动条(easyscroll)实现方法
2019/08/29 Javascript
JS使用H5实现图片预览功能
2019/09/30 Javascript
创建与框架无关的JavaScript插件
2020/12/01 Javascript
[01:02:48]2018DOTA2亚洲邀请赛 4.1 小组赛 A组 LGD vs OG
2018/04/02 DOTA
Python爬虫实例扒取2345天气预报
2018/03/04 Python
Django接收照片储存文件的实例代码
2020/03/07 Python
Pycharm安装python库的方法
2020/11/24 Python
护理专业个人求职简历的自我评价
2013/10/13 职场文书
竞选村长演讲稿
2014/04/28 职场文书
副总经理岗位职责范本
2014/09/30 职场文书
二手车转让协议书
2015/01/29 职场文书
2015年宣传部工作总结范文
2015/03/31 职场文书
格列夫游记读书笔记
2015/07/01 职场文书
导游词之西湖雷峰塔
2019/09/18 职场文书
修改MySQL的数据库引擎为INNODB的方法
2021/05/26 MySQL
WebWorker 封装 JavaScript 沙箱详情
2021/11/02 Javascript