Byr*_*ahl 3 html jquery internet-explorer
我正在使用Approval Tests和WatiN来测试我的ASP.NET MVC2页面的集成.WatiN启动IE以命中给定的URL,然后在变量中给出浏览器的html响应.然后,批准测试允许我将html响应与html响应的"已批准"版本进行比较.除了某些东西(IE或JQuery)为我的元素添加一个意外的属性之外,这个系统工作得很好.
这是IE的HTML响应中的表单标记的副本:
<FORM method=post action=/Account/LogOn jQuery1314030136323="2">
Run Code Online (Sandbox Code Playgroud)
注意jQuery1314...表单元素中的属性.它始终设置为"2",但属性的名称始终不同(jQuery ###########).由于每次都不同,我的审批测试失败了.我需要在html输出上运行正则表达式并用暴力删除参数,找到一种方法使每次属性名称相同,或者完全删除.有任何想法吗?
我故意不用ASP.NET标记它,因为我真的认为这是特定于IE或JQuery.
这就是jQuery添加到它与之交互的每个DOM元素的uuid/jQuery.expando,以解决浏览器内存泄漏问题.
旧样式代码等待window.onunload从DOM标记解除绑定Javascript数据以防止内存泄漏.JQuery通过在属性中使用一个简单的数字(比如代码示例中的那个)来避免这种情况,然后在Javascript中保留一个标记和数字的哈希映射(它称之为uuid).
奇怪的属性名称是jQuery.expando的值,您可以在代码中轻松搜索,并且每次都可以将其设置为随机值.这样做是为了允许jQuery的多个副本在页面上共存而不会相互干扰.
我不知道我需要在同一页面上需要多个jQuery的用例,我怀疑你也不需要这个功能 - 你可以通过消除这个功能轻松解决这个问题.修改代码以将jQuery.expando设置为某些硬编码值,例如'jquery',而不是随机数,你就可以了.
注意不要在同一页面中使用jQuery两次!虽然偶然这样做会引入许多其他奇怪的副作用(比如重复使用$),所以这一点可能没有实际意义.
我在这个问题中详细介绍了jQuery.expando/uuid: 为什么JQuery没有公开其UUID功能?
你会在那篇文章中注意到属性的值是随机的 - 它是一个计数器,它基于到目前为止jQuery已经与多少个标签进行了交互.如果您的代码要求属性值保持一致,您可能仍会遇到麻烦.
更新
您需要修改您的jquery源.例如,1.6.2:http: //code.jquery.com/jquery-1.6.2.js
包括以下内容:
jQuery.extend({
cache: {},
// Please use with caution
uuid: 0,
// Unique for each copy of jQuery on the page
// Non-digits removed to match rinlinejQuery
expando: "jQuery" + ( jQuery.fn.jquery + Math.random() ).replace( /\D/g, "" ),
Run Code Online (Sandbox Code Playgroud)
您可以按如下方式更改expando行:
// Does not support multiple copies of jQuery on the same page!
// 0 included to match rinlinejQuery (/jQuery\d+/)
expando: "jQuery0",
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1358 次 |
| 最近记录: |