禁用页面部分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 导出数据到Excel(处理table中的元素)
Dec 18 Javascript
仿百度输入框智能提示的js代码
Aug 22 Javascript
jquery计算鼠标和指定元素之间距离的方法
Jun 26 Javascript
jquery插件jquery.beforeafter.js实现左右拖拽分隔条对比图片的方法
Aug 07 Javascript
JavaScript简单下拉菜单实例代码
Sep 07 Javascript
jQuery ajax 当async为false时解决同步操作失败的问题
Nov 18 Javascript
Windows下Node.js安装及环境配置方法
Sep 18 Javascript
vue中的计算属性实例详解
Sep 19 Javascript
Javascript实现秒表倒计时功能
Nov 17 Javascript
JavaScript实现小球沿正弦曲线运动
Sep 07 Javascript
JS使用正则表达式提交页面验证的代码
Oct 16 Javascript
Vue实现摇一摇功能(兼容ios13.3以上)
Jan 26 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
修改apache配置文件去除thinkphp url中的index.php
2014/01/17 PHP
PHP父类调用子类方法的代码例子
2014/04/09 PHP
PHP基本语法总结
2014/09/06 PHP
php学习笔记之面向对象
2014/11/08 PHP
smarty中post用法实例
2014/11/28 PHP
一个非常实用的php文件上传类
2017/07/04 PHP
使用laravel的migrate创建数据表的方法
2019/09/30 PHP
js与jquery获取父元素,删除子元素的两种不同方法
2014/01/09 Javascript
javascript中取前n天日期的两种方法分享
2014/01/26 Javascript
jquery实现浮动在网页右下角的彩票开奖公告窗口代码
2015/09/04 Javascript
举例说明如何为JavaScript的方法参数设置默认值
2015/11/17 Javascript
AngularJS Module方法详解
2015/12/08 Javascript
理解Javascript图片预加载
2016/02/23 Javascript
使用Bootstrap框架制作查询页面的界面实例代码
2016/05/27 Javascript
JS实现动态表格的添加,修改,删除功能(推荐)
2016/06/15 Javascript
seajs模块之间依赖的加载以及模块的执行
2016/10/21 Javascript
基于jQuery实现的查看全文功能【实用】
2016/12/11 Javascript
jQuery表格的维护和删除操作
2017/02/03 Javascript
JavaScript使用链式方法封装jQuery中CSS()方法示例
2017/04/07 jQuery
js 获取html5的data属性实现方法
2017/07/28 Javascript
深入理解JS中Number(),parseInt(),parseFloat()三者比较
2018/08/24 Javascript
vueScroll实现移动端下拉刷新、上拉加载
2019/03/22 Javascript
mpvue小程序循环动画开启暂停的实现方法
2019/05/15 Javascript
何时/使用 Vue3 render 函数的教程详解
2020/07/25 Javascript
详解三种方式在React中解决绑定this的作用域问题并传参
2020/08/18 Javascript
[43:51]2014 DOTA2国际邀请赛中国区预选赛 Dream Times VS TongFu
2014/05/22 DOTA
Python实现合并字典的方法
2015/07/07 Python
解决python 输出是省略号的问题
2018/04/19 Python
python Django编写接口并用Jmeter测试的方法
2019/07/31 Python
Groupon荷兰官方网站:高达70%的折扣
2019/11/01 全球购物
意大利在线高尔夫商店:Online Golf
2021/03/09 全球购物
毕业生教师求职信
2013/10/20 职场文书
《海伦?凯勒》教学反思
2014/04/17 职场文书
倡议书范文大全
2015/04/28 职场文书
焦裕禄纪念馆观后感
2015/06/09 职场文书
经典格言警句:没有热忱,世间便无进步
2019/11/13 职场文书