网络编程
位置:首页>> 网络编程>> JavaScript>> JScript RuntimeObject检测全局污染

JScript RuntimeObject检测全局污染

作者:Denis 来源:Denis'Blog 发布时间:2010-09-13 12:26:00 

标签:JScript,RuntimeObject,IE

这是一篇关于使用JScript RuntimeObject(MSDN)调试的文章。虽然这些例子中的大多数在其他浏览器中不能运行,但在IE 5.5+中都能运行。

泄露的全局标识符

比如说你一不小心创建了一个全局属性,如:

function playRugby(players) {  
var items,     
i;      
len = items.length;
// Global.
}
function kick() { 
var x = 10     
y = 11;
// As I makes y global.
}

当调用playRugby时,创建了全局属性len,如果它尚未存在,那么就将items.length的值赋给它。同样,当调用kick时,创建了全局属性y。

这些全局变量都不是故意的。它们破坏了封装并泄露了执行的细节。这可能会导致冲突和棘手的依赖问题。

要检测这些不经意间创建的全局标识符,我们可以使用for in循环全局对象。Firebug的”DOM”标签提供了这个实用的全局检测。

遗憾的是,在IE中,for in不能枚举任何全局变量和函数声明。看看下面的例子:

// Property of global variable object.
var EX1_GLOBAL_VARIABLE = 10;
// Property of global object.
this.EX1_GLOBAL_PROPERTY = 11;
// Property of global variable object.
function EX1_GLOBAL_FUNCTION(){}
(function(){
var results = []; 
for(var p in this) { 
results.push(p);
}  
alert("Leaked:\n" + results.join("\n"));
})();

在IE中,结果包含一个window属性组合和用户定义的四个属性之一:EX1_GLOBAL_PROPERTY 。

那么,其它三个用户定义的属性发生了什么?为什么它们不能在for in循环中显示出来。

事实证明,枚举全局对象时将枚举已赋值的全局对象属性,而不枚举全局变量。

为什么全局属性能枚举而全局变量不能。经验告诉我们,JScript 给全局变量(用var声明)打上了DontEnum标记。由于全局对象是作为全局变量对象来定义的,这看起来似乎是一个合理的解释。这并不标准,但能解释IE中的行为。不过,Eric Lippert 提出了另一种解释:全局对象和全局变量对象是IE中两个不同的对象。

根据MS-ES3:

JScript 5.x 中的变量声明创建了全局对象的属性,该属性拥有DontEnum 特性。

0
投稿

猜你喜欢

  •  现在正在搞三层开发,用ASP和VB6.0,但是现在苦于没有找到合适的方法来调试自己写的DLL文件,效率相当低。  &n
  • 一个XML文档如果符合一些基本的规范,那它就是结构规范的。XML格式有一套比HTML简单的解析规则,允许XML解析器不需要外部描述或了解数据
  • 众所周知,FileSystemObject(fso)组件的强大功能及破坏性是它屡屡被免费主页提供商(那些支持ASP)的禁用的原因,我整理了一
  • 一:创建迁移在laravel中使用make:migration命令来创建迁移php artisan make:migration creat
  • asp之家注:有时候我们需要知道我们链接的远程图片是否正常,是否存在,当不存在时如果我们继续引用,就会在网页上留个大大的X,影响了页面美观。
  • 如果在session级保存一个dictionary对象会降低系统的性能,而在application级保存一个dictionary对象会导致w
  • 前端代码要做到简洁易读、高效,还要考虑后端嵌套的方便性。前段时间做了一个导航,把整个制作过程重现,希望对大家有帮助。看到这样的导航,你会怎么
  • 首先感谢比尔、感谢微软、感谢MSDN,是他们让我看到他们富有创意的一面,好了好了不废话了。我们经常把多个CSS或者多个JS并成一个,以节省请
  • 在本人看来,HTML 5是一个妥协方案,虽不激进,但更能推动技术的继续进步。没有命名空间,元素也不要求闭合(当然这并不是优点),浏览器也可以
  • 今天用FrontPage2003,无意中发现一个bug,稍加研究,基本发现这个bug的规律了首先是我的系统版本和Frontpage版本:我的
  • 远程(如通过互联网)连接access数据库的示例:首先,需要使用TCP/IP,ADO及XML(需要安装Microsoft XML 4.0。)
  • aspImage是ServerObjects站点上非常好的一个组件,它可以使我们利用Asp实现很多对于图形的处理功能,他的功能强大,如果你需
  • 我以centos 4.4 下面的mysql 5.0.33 手工编译版本为例说明:vi /usr/local/mysql/bin/m
  • 用VBS语言实现的一个简单网页计算器,功能:可以进行加法、减法、乘法、除法、取反、开根号、及指数运算。虽然简单但是比起windows xp自
  • 本文介绍了使用XMlhttp技术来生成html页面,值得借鉴。相关函数:<%  ’定义xmlhttp  funct
  • 因些朋友发来邮件讲根据文章修改后无效,懒羊再次检查后发现在工具栏中并无添加,所以还得做一下下面步骤,再此给大家造成的不便还请多多谅解!因FC
  • 1. 用Dreamweaver 4.0轻松设计会自动弹性调整的网页 首先需要保证的是你的页面内容采用了表格的格式,然后打开你要编辑的页面,按
  • 通常我们做统计图的时候需要借助组件来完成例如mschart,aspchart等但是这个类不需要任何组件,而且使用方便,本站测试可用:clsG
  • 前言 日益增长的分布式应用需求要求实现更好分布式的软件环境,不断推动着分布式技术的进步。Oracle数据复制是实现分布式数据环境的一种技术,
  • 虽然说标题将的是首页的访问感受,但是同样适合于网站其它页面的用户体验设计,一个好的网站设计应当尽量做到首页和次页一视同仁。第一步(视觉设计)
手机版 网络编程 asp之家 www.aspxhome.com