javascript:(function() {var ro=RuntimeObject(),r=[],i=0,p;for(p in ro){r[i++]=p;}alert('leaked:n'+r.join('n'));})();JScript语法扩展 在较早的“查找由FunctionBindingList建设的标识符”的例子中提到过JScript扩展--JScriptFunction。这个名字不是一个马脚,它是JScript说话的扩展,JScriptFunction 如下:
JScriptFunction : function FunctionBindingList ( FormalParameterListopt ) { FunctionBody }
RuntimeObject(filterString): The filterString Parameter
RuntimeObject要领接管一个可选的过滤字符去匹配标识符。遗憾的是,filterString 不能转换成正则表达式,而是用可选的leftWild和rightWild来举办子匹配默以为“*”。
这意味着filterString = “a*” 将匹配标识符a和a1,而不是ba 。
结论
抛开文档的bug和弱点来说,RuntimeObject 提供了一个有效的更换方案来办理JScript中列举全局属性的题目。RuntimeObject的利益在于它仅包罗用户界说的属性,全局的window属性除外。
前面提到的书签提供了一个轻盈的要领去查察一个页面中不经意间建设的全局属性(它也表白这个站点也不是全局工具保持洁净的光耀规范)。
RuntimeObject的其余应用
跨赏识器标识泄漏书签
相对付IE中标识泄漏检测,写一个跨赏识器标识泄漏检测是下一个逻辑步调。
自动标识符泄漏检测
不测的全局标识符检测应该是自动匹配的。
YUI Test 的单位测试框架为TEST_CASE_BEGIN_EVENT 和TEST_CASE_COMPLETE_EVENT 提供了钩子。这些变乱用来检测RuntimeObject,并在措施代码运行时代捕获泄漏的标识符。
在TEST_CASE_BEGIN_EVENT 中检测RuntimeObject 并存储功效。在TEST_CASE_COMPLETE_EVENT 中再次检测RuntimeObject 并与TEST_CASE_BEGIN_EVENT中存储的功效较量。接下来,对付每一个呈此刻TEST_CASE_COMPLETE_EVENT中而并没有呈此刻TEST_CASE_BEGIN_EVENT中的每属性,一个全局标识符已被泄漏,一个测试案例的告诫就会记录下来。
参考
[MS-ES3EX]: Microsoft JScript Extensions to the ECMAScript Language Specification Third Edition. 原文地点:http://dhtmlkitchen.com/?category=/Browsers/&date=2010/04/11/&entry=Detecting-Global-Pollution-with-the-JScript-RuntimeObject
转载地点:http://www.denisdeng.com/?p=1043 (编辑:湖南网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|