禁用页面部分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 相关文章推荐
jQuery 浮动广告实现代码
Dec 25 Javascript
关于递归运算的顺序测试代码
Nov 30 Javascript
jquery的ajax()函数传值中文乱码解决方法介绍
Nov 08 Javascript
JavaScript二维数组实现的省市联动菜单
May 08 Javascript
window.open()详解及浏览器兼容性问题示例探讨
May 29 Javascript
ES6中javascript实现函数绑定及类的事件绑定功能详解
Nov 08 Javascript
vue.js与后台数据交互的实例讲解
Aug 08 Javascript
详解Ubuntu安装angular-cli遇到的坑
Sep 08 Javascript
使用Vue实现移动端左滑删除效果附源码
May 16 Javascript
vue-cli3 配置开发与测试环境详解
May 17 Javascript
vue 导航锚点_点击平滑滚动,导航栏对应变化详解
Aug 10 Javascript
vue使用echarts实现水平柱形图实例
Sep 09 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中抽象类和接口的概念以及区别
2013/06/27 PHP
PHP中ob_start函数的使用说明
2013/11/11 PHP
用 Composer构建自己的 PHP 框架之基础准备
2014/10/30 PHP
php通过sort()函数给数组排序的方法
2015/03/18 PHP
Centos 6.5下PHP 5.3安装ffmpeg扩展的步骤详解
2017/03/02 PHP
PHP实现微信小程序用户授权的工具类示例
2019/03/05 PHP
JQuery的Ajax请求实现局部刷新的简单实例
2014/02/11 Javascript
js图片闪动特效可以控制间隔时间如几分钟闪动一下
2014/08/12 Javascript
JavaScript通过select动态更换图片的方法
2015/03/23 Javascript
JS随机调用指定函数的方法
2015/07/01 Javascript
微信小程序 wxapp地图 map详解
2016/10/31 Javascript
详解vue-router 2.0 常用基础知识点之router.push()
2017/05/10 Javascript
关于jQuery库冲突的完美解决办法
2017/05/20 jQuery
微信小程序button组件使用详解
2018/01/31 Javascript
vue实现a标签点击高亮方法
2018/03/17 Javascript
ajax与jsonp的区别及用法
2018/10/16 Javascript
JavaScript实现的拼图算法分析
2019/02/13 Javascript
vue  elementUI 表单嵌套验证的实例代码
2019/11/06 Javascript
小程序接入腾讯位置服务的详细流程
2020/03/03 Javascript
vue打包静态资源后显示空白及static文件路径报错的解决
2020/09/02 Javascript
Python查询阿里巴巴关键字排名的方法
2015/07/08 Python
星球大战与Python之间的那些事
2016/01/07 Python
Python学习之Django的管理界面代码示例
2018/02/10 Python
python3 下载网络图片代码实例
2019/08/27 Python
django为Form生成的label标签添加class方式
2020/05/20 Python
解决Python中导入自己写的类,被划红线,但不影响执行的问题
2020/07/13 Python
Python使用pickle进行序列化和反序列化的示例代码
2020/09/22 Python
如何利用pycharm进行代码更新比较
2020/11/04 Python
美国大尺码女装零售商:TORRID
2016/10/01 全球购物
最新优秀教师个人先进事迹材料
2014/05/06 职场文书
开业庆典活动策划方案
2014/09/21 职场文书
赔偿协议书
2015/01/27 职场文书
小学端午节活动总结
2015/02/11 职场文书
2016国培研修心得体会
2016/01/08 职场文书
《抽屉原理》教学反思
2016/02/20 职场文书
Html5获取用户当前位置的几种方式
2022/01/18 HTML / CSS