禁用页面部分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 相关文章推荐
nullJavascript中创建对象的五种方法实例
May 07 Javascript
js实现回放拖拽轨迹从过程上进行分析
Jun 26 Javascript
JavaScript实现防止网页被嵌入Frame框架的代码分享
Dec 29 Javascript
Bootstrap入门书籍之(三)栅格系统
Feb 17 Javascript
EasyUI中在表单提交之前进行验证
Jul 19 Javascript
Vue2.0 slot分发内容与props验证的方法
Dec 12 Javascript
vue.js select下拉框绑定和取值方法
Mar 03 Javascript
vue用递归组件写树形控件的实例代码
Jul 19 Javascript
D3.js(v3)+react 实现带坐标与比例尺的散点图 (V3版本)
May 09 Javascript
Moment.js实现多个同时倒计时
Aug 26 Javascript
js异步接口并发数量控制的方法示例
Nov 22 Javascript
JavaScript实现复选框全选功能
Apr 11 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 var_dump遍历对象属性的函数与应用代码
2010/06/04 PHP
老生常谈PHP中的数据结构:DS扩展
2017/07/17 PHP
php数组指针函数功能及用法示例
2020/02/11 PHP
PHP程序员简单的开展服务治理架构操作详解(一)
2020/05/14 PHP
宝塔面板在NGINX环境中TP5.1如何运行?
2021/03/09 PHP
js校验表单后提交表单的三种方法总结
2014/02/28 Javascript
jquery form 加载数据示例
2014/04/21 Javascript
给应用部分的js代码设定一个统一的入口
2014/06/15 Javascript
ECMAScript中函数function类型
2015/06/03 Javascript
举例详解JavaScript中Promise的使用
2015/06/24 Javascript
jQuery模拟360浏览器切屏效果幻灯片(附demo源码下载)
2016/01/29 Javascript
JS实现css hover操作的方法示例
2017/04/07 Javascript
Angular.JS内置服务$http对数据库的增删改使用教程
2017/05/07 Javascript
原生JS封装animate运动框架的实例
2017/10/12 Javascript
基于vue打包后字体和图片资源失效问题的解决方法
2018/03/06 Javascript
vue-rx的初步使用教程
2018/09/21 Javascript
VUE实现可随意拖动的弹窗组件
2018/09/25 Javascript
layui checkbox默认选中,获取选中值,清空所有选中项的例子
2019/09/02 Javascript
webpack的tree shaking的实现方法
2019/09/18 Javascript
jquery实现点击弹出对话框
2020/02/08 jQuery
详解Vue.js 响应接口
2020/07/04 Javascript
浅析JavaScript 函数柯里化
2020/09/08 Javascript
详解Django中的权限和组以及消息
2015/07/23 Python
在Python中通过threading模块定义和调用线程的方法
2016/07/12 Python
Django进阶之CSRF的解决
2018/08/01 Python
Python基础教程之if判断,while循环,循环嵌套
2019/04/25 Python
python 数据生成excel导出(xlwt,wlsxwrite)代码实例
2019/08/23 Python
python统计字符串中字母出现次数代码实例
2020/03/02 Python
pyqt5数据库使用详细教程(打包解决方案)
2020/03/25 Python
美国最好的钓鱼、狩猎和划船装备商店:Bass Pro Shops
2018/12/02 全球购物
致800米运动员广播稿(10篇)
2014/10/17 职场文书
听证通知书
2015/04/24 职场文书
python xlwt模块的使用解析
2021/04/13 Python
go设置多个GOPATH的方式
2021/05/05 Golang
解决MySQL添加新用户-ERROR 1045 (28000)的问题
2022/03/03 MySQL
JAVA SpringMVC实现自定义拦截器
2022/03/16 Python