禁用页面部分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 相关文章推荐
js 图片轮播(5张图片)
Dec 30 Javascript
javascript实现的在当前窗口中漂浮框的代码
Mar 15 Javascript
JQuery实现简单验证码提示解决方案
Dec 20 Javascript
对 jQuery 中 data 方法的误解分析
Jun 18 Javascript
js带缩略图的图片轮播效果代码分享
Sep 14 Javascript
jQuery内存泄露解决办法
Dec 13 Javascript
Jquery Easyui进度条组件Progress使用详解(8)
Mar 26 Javascript
Vue打包后出现一些map文件的解决方法
Feb 13 Javascript
JavaScript实现图片上传并预览并提交ajax
Sep 30 Javascript
Vue引入Stylus知识点总结
Jan 16 Javascript
浅谈vue中get请求解决传输数据是数组格式的问题
Aug 03 Javascript
ant design的table组件实现全选功能以及自定义分页
Nov 17 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
PHP session常见问题集锦及解决办法总结
2007/03/18 PHP
PHP ajax 分页类代码
2008/11/13 PHP
PHP Array交叉表实现代码
2010/08/05 PHP
PHP写杨辉三角实例代码
2011/07/17 PHP
Smarty模板语法详解
2019/07/20 PHP
PHP7 foreach() 函数修改
2021/03/09 PHP
greybox——不开新窗口看新的网页
2007/02/20 Javascript
js form action动态修改方法
2008/11/04 Javascript
理解Javascript_13_执行模型详解
2010/10/20 Javascript
禁用键盘上的(全局)指定键兼容iE、Chrome、火狐
2013/05/14 Javascript
JavaScript打印iframe内容示例代码
2013/08/20 Javascript
jquery ajax的success回调函数中实现按钮置灰倒计时
2013/11/19 Javascript
使用AngularJS创建自定义的过滤器的方法
2015/06/18 Javascript
果断收藏9个Javascript代码高亮脚本
2016/01/06 Javascript
jquery对复选框(checkbox)的操作汇总
2016/01/13 Javascript
浅谈bootstrap使用中的一些问题以及解决过程
2016/10/18 Javascript
基于JavaScript实现拖动滑块效果
2017/02/16 Javascript
通过npm引用的vue组件使用详解
2017/03/02 Javascript
想用好React的你必须要知道的一些事情
2017/07/24 Javascript
React-Native中禁用Navigator手势返回的示例代码
2017/09/09 Javascript
jQuery实现动态控制页面元素的方法分析
2017/12/20 jQuery
基于Node.js搭建hexo博客过程详解
2019/06/25 Javascript
详解Python3中yield生成器的用法
2015/08/20 Python
python3.6+opencv3.4实现鼠标交互查看图片像素
2018/02/26 Python
Python使用matplotlib绘制余弦的散点图示例
2018/03/14 Python
Python利用公共键如何对字典列表进行排序详解
2018/05/19 Python
numpy向空的二维数组中添加元素的方法
2018/11/01 Python
windows7 32、64位下python爬虫框架scrapy环境的搭建方法
2018/11/29 Python
python打印n位数“水仙花数”(实例代码)
2019/12/25 Python
时尚设计师手表:The Watch Cabin
2018/10/06 全球购物
Craghoppers德国官网:户外和旅行服装
2020/02/14 全球购物
参观监狱心得体会
2014/01/02 职场文书
优质服务活动实施方案
2014/05/02 职场文书
2015年小学辅导员工作总结
2015/05/27 职场文书
导游词之山海关
2019/12/10 职场文书
仅仅使用 HTML/CSS 实现各类进度条的方式汇总
2021/11/11 HTML / CSS