禁用页面部分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 相关文章推荐
屏蔽鼠标右键、Ctrl+n、shift+F10、F5刷新、退格键 的javascript代码
Apr 01 Javascript
JavaScript CSS修改学习第六章 拖拽
Feb 19 Javascript
CodeMirror2 IE7/IE8 下面未知运行时错误的解决方法
Mar 29 Javascript
JavaScript Serializer序列化时间处理示例
Jul 31 Javascript
JS实现六边形3D拖拽翻转效果的方法
Sep 11 Javascript
深入理解Vue-cli搭建项目后的目录结构探秘
Jul 13 Javascript
jQuery控制input只能输入数字和两位小数的方法
May 16 jQuery
在JavaScript中实现链式调用的实现
Dec 24 Javascript
通过微信公众平台获取公众号文章的方法示例
Dec 25 Javascript
Vue解析剪切板图片并实现发送功能
Feb 04 Javascript
微信小程序实现滑动操作代码
Apr 23 Javascript
在HTML5 localStorage中存储对象的示例代码
Apr 21 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 之 写时复制介绍(Copy On Write)
2014/05/13 PHP
PHP+MySQL实现无极限分类栏目的方法
2015/12/23 PHP
php两点地理坐标距离的计算方法
2018/12/29 PHP
JavaScript 学习笔记(五)
2009/12/31 Javascript
jquery1.9 下检测浏览器类型和版本的方法
2013/12/26 Javascript
JavaScript学习笔记之JS函数
2015/01/22 Javascript
常用js,css文件统一加载方法(推荐) 并在加载之后调用回调函数
2016/09/23 Javascript
解读ES6中class关键字
2017/11/20 Javascript
详解Vue依赖收集引发的问题
2019/04/22 Javascript
vue项目前端错误收集之sentry教程详解
2019/05/27 Javascript
JS前端知识点总结之内置对象,日期对象和定时器相关操作
2019/07/05 Javascript
更优雅的微信小程序骨架屏实现详解
2019/08/07 Javascript
Centos7 安装Node.js10以上版本的方法步骤
2019/10/15 Javascript
js实现自定义右键菜单
2020/05/18 Javascript
[00:43]2016完美“圣”典风云人物:单车宣传片
2016/12/02 DOTA
[06:59]DOTA2-DPC中国联赛3月7日Recap集锦
2021/03/11 DOTA
python基于urllib实现按照百度音乐分类下载mp3的方法
2015/05/25 Python
深入解析Python设计模式编程中建造者模式的使用
2016/03/02 Python
python实现简单名片管理系统
2018/11/30 Python
Python中的枚举类型示例介绍
2019/01/09 Python
python中的数组赋值与拷贝的区别详解
2019/11/26 Python
使用jupyter notebook将文件保存为Markdown,HTML等文件格式
2020/04/14 Python
python实现飞船大战
2020/04/24 Python
Django filter动态过滤与排序实现过程解析
2020/11/26 Python
CSS3 calc()会计算属性详解
2018/02/27 HTML / CSS
HTML5 Canvas实现平移/放缩/旋转deom示例(附截图)
2013/07/04 HTML / CSS
新西兰最大的在线设计师眼镜店:SmartBuyGlasses新西兰
2017/10/20 全球购物
马德里竞技官方网上商店:Atletico Madrid Shop
2019/03/31 全球购物
ASOS西班牙官网:英国在线时尚和美容零售商
2020/01/10 全球购物
阿玛尼美妆俄罗斯官网:Giorgio Armani Beauty RU
2020/07/19 全球购物
.NET面试题:什么是反射
2016/09/30 面试题
项目管理计划书
2014/01/09 职场文书
个人自荐书范文
2015/03/09 职场文书
2015年双拥工作总结
2015/04/08 职场文书
社区义诊通知
2015/04/24 职场文书
Python自然语言处理之切分算法详解
2021/04/25 Python