禁用页面部分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 相关文章推荐
javascript TextArea动态显示剩余字符
Oct 22 Javascript
javascript options属性集合操作代码
Dec 28 Javascript
关于javascript event flow 的一个bug详解
Sep 17 Javascript
jQuery实现鼠标经过图片变亮其他变暗效果
May 08 Javascript
js生成随机数的方法实例
Oct 16 Javascript
jquery,js简单实现类似Angular.js双向绑定
Jan 13 Javascript
JavaScript实现简单图片轮播效果
Aug 21 Javascript
jQuery实现上下滚动公告栏详细代码
Nov 21 jQuery
Vue中computed、methods与watch的区别总结
Apr 10 Javascript
JavaScript中判断为整数的多种方式及保留两位小数的方法
Sep 09 Javascript
JavaScript简单编程实例学习
Feb 14 Javascript
对vuex中store和$store的区别说明
Jul 24 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+JS无限级可伸缩菜单详解(简单易懂)
2007/01/02 PHP
PHP设计模式 注册表模式(多个类的注册)
2012/02/05 PHP
PHP取整数函数常用的四种方法小结
2012/07/05 PHP
PHP实现今天是星期几的几种写法
2013/09/26 PHP
PHP中CheckBox多选框上传失败的代码写法
2017/02/13 PHP
php数组指针操作详解
2017/02/14 PHP
PHP守护进程化在C和PHP环境下的实现
2017/11/21 PHP
鼠标右击事件代码(asp.net后台)
2011/01/27 Javascript
jquery实现动态改变div宽度和高度
2015/05/08 Javascript
轻松实现JavaScript图片切换
2016/01/12 Javascript
JQuery解析XML数据的几个简单实例
2016/05/18 Javascript
JavaScript中日期函数的相关操作知识
2016/08/03 Javascript
BOM系列第三篇之定时器应用(时钟、倒计时、秒表和闹钟)
2016/08/17 Javascript
老生常谈的跨域处理
2017/01/11 Javascript
利用Js+Css实现折纸动态导航效果实例源码
2017/01/25 Javascript
element-ui如何防止重复提交的方法步骤
2019/12/09 Javascript
vue-cli3访问public文件夹静态资源报错的解决方式
2020/09/02 Javascript
分享8个JavaScript库可更好地处理本地存储
2020/10/12 Javascript
vue+element table表格实现动态列筛选的示例代码
2021/01/14 Vue.js
[47:04]LGD vs infamous Supermajor小组赛D组 BO3 第二场 6.3
2018/06/04 DOTA
Python虚拟环境项目实例
2017/11/20 Python
Python操作MySQL模拟银行转账
2018/03/12 Python
Python实现的远程登录windows系统功能示例
2018/06/21 Python
python3 打印输出字典中特定的某个key的方法示例
2019/07/06 Python
从列表或字典创建Pandas的DataFrame对象的方法
2019/07/06 Python
python使用Geany编辑器配置方法
2020/02/21 Python
Python3标准库之dbm UNIX键-值数据库问题
2020/03/24 Python
html5使用canvas绘制文字特效
2014/12/15 HTML / CSS
以实惠的价格轻松租车,免费取消:Easyrentcars
2019/07/16 全球购物
荷兰DOD药房中文官网:DeOnlineDrogist
2020/12/27 全球购物
成教毕业生自我鉴定
2013/10/23 职场文书
地球物理学专业推荐信
2014/09/08 职场文书
春节慰问简报
2015/07/21 职场文书
继续教育心得体会(共6篇)
2016/01/19 职场文书
高中物理教学反思
2016/02/19 职场文书
详解Java实践之建造者模式
2021/06/18 Java/Android