禁用页面部分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 相关文章推荐
23个Javascript弹出窗口特效整理
Feb 25 Javascript
JS完成代码前最好对其做5件事
Apr 07 Javascript
js 去掉空格实例 Trim() LTrim() RTrim()
Jan 07 Javascript
JS打开新窗口防止被浏览器阻止的方法
Jan 03 Javascript
JavaScript之数组(Array)详解
Apr 01 Javascript
jquery实现简洁文件上传表单样式
Nov 02 Javascript
jstree单选功能的实现方法
Jun 07 Javascript
javascript获取图片的top N主色值方法详解
Jan 26 Javascript
基于vue-router 多级路由redirect 重定向的问题
Sep 03 Javascript
ES6中let 和 const 的新特性
Sep 03 Javascript
一文了解Vue中的nextTick
May 06 Javascript
JavaScript函数柯里化实现原理及过程
Dec 02 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写的MySQL数据库用户认证系统代码
2007/03/22 PHP
队列在编程中的实际应用(php)
2010/09/04 PHP
PHP5中Cookie与 Session使用详解
2013/04/30 PHP
php 读取文件头判断文件类型的实现代码
2013/08/05 PHP
PHP实现HTML生成PDF文件的方法
2014/11/07 PHP
php数组添加元素方法小结
2014/12/20 PHP
php判断表是否存在的方法
2015/06/18 PHP
详解PHP中instanceof关键字及instanceof关键字有什么作用
2015/11/05 PHP
ThinkPHP中create()方法自动验证实例
2017/04/26 PHP
PHP简单实现遍历目录下特定文件的方法小结
2017/05/22 PHP
PHP crypt()函数的用法讲解
2019/02/15 PHP
JS回调函数的应用简单实例
2014/09/17 Javascript
JavaScript中的数值范围介绍
2014/12/29 Javascript
javascript常用的方法整理
2015/08/20 Javascript
JS+CSS实现的日本门户网站经典选项卡导航效果
2015/09/27 Javascript
Bootstrap三种表单布局的使用方法
2016/06/21 Javascript
由浅入深剖析Angular表单验证
2016/07/14 Javascript
vue.js数据绑定操作详解
2018/04/23 Javascript
element-ui带输入建议的input框踩坑(输入建议空白以及会闪出上一次的输入建议问题)
2019/01/15 Javascript
vue.js中使用echarts实现数据动态刷新功能
2019/04/16 Javascript
vue中使用props传值的方法
2019/05/08 Javascript
vue实现井字棋游戏
2020/09/29 Javascript
[36:05]完美世界DOTA2联赛循环赛 Forest vs DM 第一场 11.06
2020/11/06 DOTA
利用Python批量提取Win10锁屏壁纸实战教程
2018/03/27 Python
浅谈Python3中strip()、lstrip()、rstrip()用法详解
2019/04/29 Python
解决python super()调用多重继承函数的问题
2019/06/26 Python
如何在python中实现随机选择
2019/11/02 Python
python使用梯度下降和牛顿法寻找Rosenbrock函数最小值实例
2020/04/02 Python
利用Python发送邮件或发带附件的邮件
2020/11/12 Python
详解WebSocket跨域问题解决
2018/08/06 HTML / CSS
Expedia印度尼西亚站:预订酒店、廉价航班和度假套餐
2018/01/31 全球购物
French Connection官网:女装、男装及家居用品
2019/03/18 全球购物
元旦晚会策划方案
2014/02/18 职场文书
伦敦奥运会的口号
2014/06/21 职场文书
表彰大会新闻稿
2015/07/17 职场文书
springboot中rabbitmq实现消息可靠性机制详解
2021/09/25 Java/Android