禁用页面部分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 相关文章推荐
8款非常棒的响应式jQuery 幻灯片插件推荐
Feb 02 Javascript
JS获取html对象的几种方式介绍
Dec 05 Javascript
javascript设计模式之解释器模式详解
Jun 05 Javascript
JavaScript字符串对象charAt方法入门实例(用于取得指定位置的字符)
Oct 17 Javascript
js运动应用实例解析
Dec 28 Javascript
阿里巴巴技术文章分享 Javascript继承机制的实现
Jan 14 Javascript
JS Ajax请求如何防止重复提交
Jun 13 Javascript
Bootstrap框架的学习教程详解(二)
Oct 18 Javascript
js 转json格式的字符串为对象或数组(前后台)的方法
Nov 02 Javascript
vue+vuecli+webpack中使用mockjs模拟后端数据的示例
Oct 24 Javascript
小程序实现投票进度条
Nov 20 Javascript
Js实现粘贴上传图片的原理及示例
Dec 09 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
一个阿拉伯数字转中文数字的函数
2006/10/09 PHP
php ss7.5的数据调用 (笔记)
2010/03/08 PHP
PHP模块 Memcached功能多于Memcache
2011/06/14 PHP
php广告加载类用法实例
2014/09/23 PHP
php 批量查询搜狗sogou代码分享
2015/05/17 PHP
编写PHP脚本使WordPress的主题支持Widget侧边栏
2015/12/14 PHP
PHP提取字符串中的手机号正则表达式怎么写
2017/07/17 PHP
PHP基于redis计数器类定义与用法示例
2018/02/08 PHP
thinkPHP5框架auth权限控制类与用法示例
2018/06/12 PHP
解决thinkPHP 5 nginx 部署时,只跳转首页的问题
2019/10/16 PHP
Javascript 篱式条件判断
2008/08/22 Javascript
Javascript 同时提交多个Web表单的方法
2009/02/19 Javascript
jquery uaMatch源代码
2011/02/14 Javascript
JS不间断向上滚动效果代码
2013/12/25 Javascript
struts2+jquery组合验证注册用户是否存在
2014/04/30 Javascript
JQuery核心函数是什么及使用方法介绍
2016/05/03 Javascript
JS FormData上传文件的设置方法
2017/07/05 Javascript
vue.js数据绑定的方法(单向、双向和一次性绑定)
2017/07/13 Javascript
jQuery实现的事件绑定功能基本示例
2017/10/11 jQuery
基于jQuery实现Ajax验证用户名是否可用实例
2018/03/25 jQuery
Vue用v-for给循环标签自身属性添加属性值的方法
2018/10/18 Javascript
Vue 处理表单input单行文本框的实例代码
2019/05/09 Javascript
解决layui动态加载复选框无法选中的问题
2019/09/20 Javascript
使用vue引入maptalks地图及聚合效果的实现
2020/08/10 Javascript
Python自定义scrapy中间模块避免重复采集的方法
2015/04/07 Python
详细解读Python中的__init__()方法
2015/05/02 Python
Python使用email模块对邮件进行编码和解码的实例教程
2016/07/01 Python
python thrift搭建服务端和客户端测试程序
2018/01/17 Python
Python实现的爬虫刷回复功能示例
2018/06/07 Python
Python人工智能之路 jieba gensim 最好别分家之最简单的相似度实现
2019/08/13 Python
意大利专业化妆品品牌:KIKO MILANO
2017/02/01 全球购物
Farfetch美国:奢侈品牌时尚购物平台
2019/05/02 全球购物
学校创先争优活动总结
2014/08/28 职场文书
大学生团支书竞选稿
2015/11/21 职场文书
汽车销售合同文本
2019/08/08 职场文书
导游词之澳门妈祖庙
2019/12/19 职场文书