禁用页面部分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 相关文章推荐
在b/s开发中经常用到的javaScript技术
Aug 23 Javascript
基于jquery实现select选择框内容左右移动添加删除代码分享
Aug 25 Javascript
jQuery+HTML5美女瀑布流布局实现方法
Sep 21 Javascript
JavaScript函数的一些注意要点小结及js匿名函数
Nov 10 Javascript
js实现文字闪烁特效的方法
Dec 17 Javascript
JavaScript cookie详解及简单实例应用
Dec 31 Javascript
使用 jQuery 实现表单验证功能
Jul 05 jQuery
JS 实现banner图片轮播效果(鼠标事件)
Aug 04 Javascript
AngularJS中控制器函数的定义与使用方法示例
Oct 10 Javascript
vue.js中实现登录控制的方法示例
Apr 23 Javascript
微信小程序的开发范式BeautyWe.js入门详解
Jul 10 Javascript
Vue的列表之渲染,排序,过滤详解
Feb 24 Vue.js
让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
查找mysql字段中固定字符串并替换的几个方法
2012/09/23 PHP
深入理解用mysql_fetch_row()以数组的形式返回查询结果
2013/06/05 PHP
php使用ob_start()实现图片存入变量的方法
2014/11/14 PHP
浅谈PHP中output_buffering
2015/07/13 PHP
3种php生成唯一id的方法
2015/11/23 PHP
php blowfish加密解密算法
2016/07/02 PHP
php安装扩展mysqli的实现步骤及报错解决办法
2017/09/23 PHP
PHP大文件切割上传并带进度条功能示例
2019/07/01 PHP
搭建PhpStorm+PhpStudy开发环境的超详细教程
2020/09/17 PHP
跨浏览器开发经验总结(四) 怎么写入剪贴板
2010/05/13 Javascript
倒记时60刷新网页的js代码
2014/02/18 Javascript
体验jQuery和AngularJS的不同点及AngularJS的迷人之处
2016/02/02 Javascript
jQuery插件实现适用于移动端的地址选择器
2016/02/18 Javascript
JS实现上下左右对称的九九乘法表
2016/02/22 Javascript
JQuery点击事件回到页面顶部效果的实现代码
2016/05/24 Javascript
在网页中插入百度地图的步骤详解
2016/12/02 Javascript
用nodejs实现json和jsonp服务的方法
2017/08/25 NodeJs
[js高手之路]从原型链开始图解继承到组合继承的产生详解
2017/08/28 Javascript
详解JS构造函数中this和return
2017/09/16 Javascript
vuex的使用及持久化state的方式详解
2018/01/23 Javascript
JavaScript实现的级联算法示例【省市二级联动功能】
2018/12/25 Javascript
让python的Cookie.py模块支持冒号做key的方法
2010/12/28 Python
python计算程序开始到程序结束的运行时间和程序运行的CPU时间
2013/11/28 Python
用python + openpyxl处理excel2007文档思路以及心得
2014/07/14 Python
python实现日常记账本小程序
2018/03/10 Python
pandas object格式转float64格式的方法
2018/04/10 Python
python 实现线程之间的通信示例
2020/02/14 Python
HTML5边玩边学(1)画布实现方法
2010/09/21 HTML / CSS
自考生毕业自我鉴定
2013/10/10 职场文书
市场推广策划方案
2014/06/02 职场文书
车辆工程专业求职信
2014/06/14 职场文书
人力资源管理求职信
2014/08/07 职场文书
组工干部对照检查材料
2014/08/25 职场文书
创卫工作总结2015
2015/04/22 职场文书
中学综治宣传月活动总结
2015/05/07 职场文书
迎客户欢迎词三篇
2019/09/27 职场文书