禁用页面部分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 相关文章推荐
jquery 中的each()跳出循环的语句
May 23 Javascript
一个奇葩的最短的 IE 版本判断JS脚本
May 28 Javascript
jQuery密码强度检测插件passwordStrength用法实例分析
Oct 30 Javascript
js鼠标按键事件和键盘按键事件用法实例汇总
Oct 03 Javascript
JS如何设置iOS中微信浏览器的title
Nov 22 Javascript
Javascript之面向对象--接口
Dec 02 Javascript
运用jQuery写的验证表单(实例讲解)
Jul 06 jQuery
vue在使用ECharts时的异步更新和数据加载详解
Nov 22 Javascript
JS实现二维数组元素的排列组合运算简单示例
Jan 28 Javascript
ES6知识点整理之数组解构和字符串解构的应用示例
Apr 17 Javascript
手把手教你从零开始react+antd搭建项目
Jun 03 Javascript
JavaScript的Set数据结构详解
Feb 18 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
espresso double下 咖啡粉超细时 饼压力对咖啡的影响
2021/03/03 冲泡冲煮
PHP+Mysql+jQuery实现发布微博程序 jQuery篇
2011/10/08 PHP
PHP中设置一个严格30分钟过期Session面试题的4种答案
2014/07/30 PHP
PHP函数import_request_variables()用法分析
2016/04/02 PHP
ExtJs扩展之GroupPropertyGrid代码
2010/03/05 Javascript
javascript来定义类的规范小结
2010/11/19 Javascript
仅Firefox中链接A无法实现模拟点击以触发其默认行为
2011/07/31 Javascript
javascript正则匹配汉字、数字、字母、下划线
2014/04/10 Javascript
js简单抽奖代码
2015/01/16 Javascript
浅谈JavaScript函数的四种存在形态
2016/06/08 Javascript
前端微信支付js代码
2016/07/25 Javascript
Node.js引入UIBootstrap的方法示例
2018/05/11 Javascript
JQuery Ajax跨域调用和非跨域调用问题实例分析
2019/04/16 jQuery
JavaScript实现简单进度条效果
2020/03/25 Javascript
Python装饰器使用示例及实际应用例子
2015/03/06 Python
分享一个常用的Python模拟登陆类
2015/03/29 Python
浅谈python内置变量-reversed(seq)
2017/06/21 Python
Python设计模式之命令模式简单示例
2018/01/10 Python
Python 判断 有向图 是否有环的实例讲解
2018/02/01 Python
python pandas 组内排序、单组排序、标号的实例
2018/04/12 Python
Django 浅谈根据配置生成SQL语句的问题
2018/05/29 Python
Python 输出时去掉列表元组外面的方括号与圆括号的方法
2018/12/24 Python
pytorch中如何使用DataLoader对数据集进行批处理的方法
2019/08/06 Python
tensorboard实现同时显示训练曲线和测试曲线
2020/01/21 Python
Python判断三段线能否构成三角形的代码
2020/04/12 Python
Michael Kors美国官网:美式奢侈生活风格的代表
2016/11/25 全球购物
贝玲妃英国官网:Benefit英国
2018/02/03 全球购物
工商管理系学生的自我评价分享
2013/11/29 职场文书
负责人任命书范本
2014/06/04 职场文书
中国梦读书活动总结
2014/07/10 职场文书
2014年禁毒工作总结
2014/11/24 职场文书
英文商务邀请函范文
2015/01/31 职场文书
CSS3实现三角形不断放大效果
2021/04/13 HTML / CSS
Python Pandas pandas.read_sql函数实例用法
2021/06/21 Python
python文件与路径操作神器 pathlib
2022/04/01 Python
python如何查找列表中元素的位置
2022/05/30 Python