禁用页面部分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 相关文章推荐
什么是DOM(Document Object Model)文档对象模型
Mar 05 Javascript
怎样在JavaScript里写一个swing把数据插入数据库
Dec 10 Javascript
让jQuery与其他JavaScript库并存避免冲突的方法
Dec 23 Javascript
解决jQuery动态获取手机屏幕高和宽的问题
May 07 Javascript
jquery分割字符串的方法
Jun 24 Javascript
js控制元素显示在屏幕固定位置及监听屏幕高度变化的方法
Aug 11 Javascript
详解RequireJS按需加载样式文件
Apr 12 Javascript
vue 设置路由的登录权限的方法
Jul 03 Javascript
使用typescript构建Vue应用的实现
Aug 26 Javascript
解决layui调用自定义方法提示未定义的问题
Sep 14 Javascript
JS面向对象编程基础篇(一) 对象和构造函数实例详解
Mar 03 Javascript
Vue3 实现双盒子定位Overlay的示例
Dec 22 Vue.js
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 验证码制作(网树注释思想)
2009/07/20 PHP
PHP 防注入函数(格式化数据)
2011/08/08 PHP
PHP遍历目录并返回统计目录大小
2014/06/09 PHP
JSON字符串传到后台PHP处理问题的解决方法
2016/06/05 PHP
基于PHP的加载类操作以及其他两种魔术方法的应用实例
2017/08/28 PHP
CI框架(CodeIgniter)实现的导入、导出数据操作示例
2018/05/24 PHP
PHP实现对数字分隔加千分号的方法
2019/03/18 PHP
在线游戏大家来找茬II
2006/09/30 Javascript
wordpress之js库集合研究介绍
2007/08/17 Javascript
jquery插件 autoComboBox 下拉框
2010/12/22 Javascript
jquery 合并内容相同的单元格(示例代码)
2013/12/13 Javascript
js的正则test,match,exec详细解析
2014/01/29 Javascript
将HTML格式的String转化为HTMLElement的实现方法
2014/08/07 Javascript
jQuery简单实现隐藏以及显示特效
2015/02/26 Javascript
JS实现可调整倒计时间代码分享
2015/08/18 Javascript
Node.js的环境安装配置(使用nvm方式)
2016/10/11 Javascript
vue如何实现observer和watcher源码解析
2017/03/09 Javascript
javascript实现QQ空间相册展示源码
2017/12/12 Javascript
在Vue组件中获取全局的点击事件方法
2018/09/06 Javascript
js实现移动端轮播图滑动切换
2020/12/21 Javascript
Python3中常用的处理时间和实现定时任务的方法的介绍
2015/04/07 Python
基于python的Tkinter编写登陆注册界面
2017/06/30 Python
基于Django模板中的数字自增(详解)
2017/09/05 Python
浅谈Django自定义模板标签template_tags的用处
2017/12/20 Python
Python绘制3d螺旋曲线图实例代码
2017/12/20 Python
python 高效去重复 支持GB级别大文件的示例代码
2018/11/08 Python
Python selenium抓取虎牙短视频代码实例
2020/03/02 Python
python 的numpy库中的mean()函数用法介绍
2020/03/03 Python
详解Python 最短匹配模式
2020/07/29 Python
美国奢侈品购物平台:Orchard Mile
2018/05/02 全球购物
《陋室铭》教学反思
2014/02/26 职场文书
高中升旗仪式演讲稿
2014/09/09 职场文书
开展批评与自我批评心得体会
2014/10/17 职场文书
2014年法院工作总结
2014/11/24 职场文书
研究生学习计划书应该怎么写?
2019/09/10 职场文书
C3 线性化算法与 MRO之Python中的多继承
2021/10/05 Python