禁用页面部分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 相关文章推荐
javascript+xml技术实现分页浏览
Jul 27 Javascript
javascript Prototype 对象扩展
May 15 Javascript
js不完美解决click和dblclick事件冲突问题
Jul 16 Javascript
分享精心挑选的23款美轮美奂的jQuery 图片特效插件
Aug 14 Javascript
js获取form的方法
May 06 Javascript
JavaScript仿商城实现图片广告轮播实例代码
Feb 06 Javascript
jQuery 3.0十大新特性最终版发布
Jul 14 Javascript
JavaScript 链式结构序列化详解
Sep 30 Javascript
将input框中输入内容显示在相应的div中【三种方法可选】
May 08 Javascript
jQuery Dom元素操作技巧
Feb 04 jQuery
react-native聊天室|RN版聊天App仿微信实例|RN仿微信界面
Nov 12 Javascript
JavaScript实现Tab选项卡切换
Feb 13 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
DC动画很好看?新作烂得令人发指,名叫《红色之子》
2020/04/09 欧美动漫
1 Tube Radio
2021/03/02 无线电
dede3.1分页文字采集过滤规则详说(图文教程)续四
2007/04/03 PHP
PHP学习笔记 IIS7下安装配置php环境
2012/10/29 PHP
PHP编码规范的深入探讨
2013/06/06 PHP
PHP图片裁剪函数(保持图像不变形)
2014/05/04 PHP
PHP实现对文本数据库的常用操作方法实例演示
2014/07/04 PHP
php 使用file_get_contents读取大文件的方法
2014/11/13 PHP
php实现网站顶踩功能的完整前端代码
2015/07/19 PHP
php 生成签名及验证签名详解
2016/10/26 PHP
JavaScript 字符串乘法
2009/08/20 Javascript
Prototype源码浅析 String部分(四)之补充
2012/01/16 Javascript
原生javascript和jquery判断浏览器版本等信息
2013/07/04 Javascript
juery框架写的弹窗效果适合新手
2013/11/27 Javascript
javascript教程之不完整的继承(js原型链)
2014/01/13 Javascript
JQuery调用绑定click事件的3种写法
2015/03/28 Javascript
JavaScript阻止回车提交表单的方法
2015/12/30 Javascript
详细分析jsonp的原理和实现方式
2017/11/20 Javascript
vue 移动端注入骨架屏的配置方法
2019/06/25 Javascript
Element中Slider滑块的具体使用
2020/07/29 Javascript
Python实现的简单发送邮件脚本分享
2014/11/07 Python
linux环境下python中MySQLdb模块的安装方法
2017/06/16 Python
Python脚本按照当前日期创建多级目录
2019/03/01 Python
python字典改变value值方法总结
2019/06/21 Python
pytorch构建多模型实例
2020/01/15 Python
Python基于locals返回作用域字典
2020/10/17 Python
html5新特性与用法大全
2018/09/13 HTML / CSS
美国最灵活的移动提供商:Tello
2017/07/18 全球购物
德国BA保镖药房韩文网:kr.ba.de
2017/09/04 全球购物
自荐书4要点
2014/01/25 职场文书
中学生自我鉴定
2014/02/04 职场文书
护士岗位求职应聘自荐书范文
2014/02/12 职场文书
求职意向书
2014/07/29 职场文书
Python开发之QT解决无边框界面拖动卡屏问题(附带源码)
2021/05/27 Python
Python 数据可视化之Seaborn详解
2021/11/02 Python
Springboot-cli 开发脚手架,权限认证,附demo演示
2022/04/28 Java/Android