情况
我有一个 JSPF 文件(一个 java jsp“片段”——不确定它的处理方式是否与典型的 JSP 有任何不同——我认为这只是命名法,但我发现的文档甚至堆栈答案都不清楚)。
我可以在内联脚本标签中警告这个 JSPF 文件顶部和底部的字符串,这样标签就不会被其他 HTML 恶作剧破坏或破坏。
但是,如果我在顶部脚本标记中声明一个 var,它将在底部不可用并警告“未定义”。
但是,我可以分配给窗口对象的属性,并按预期在底部脚本标记中显示该属性警报。似乎没有任何东西在修改窗口对象。它显示了正确的类型和窗口方法仍然按预期在此 JSP 文件的顶部和底部触发。
这个页面上显然很糟糕的事情:
我们正在使用大约 2007 年的prototype.js 库。我认为这是在原型做了非常丑陋的事情之后,我没有看到它与对象原型或类似的东西混在一起。
负载均衡器以 X-UA 兼容性 = IE7 模式提供所有内容,不允许 HTML 覆盖。但是,这绝对是所有内容的响应标头。图像、js 文件、CSS 文件。我曾经认为文档类型只会影响 CSS/HTML 问题,但似乎当您将其放在链接的 JS 文件上或 HTML 中有 JS 时,我们会回到 IE7 模式或其他方式。那个或其他东西正在破坏应该在 IE8 中工作但不在这些页面上的 querySelectorAll 方法。
响应标头都应用 IE7 模式,但 HTML 文档本身正在切换到怪癖模式,这让我感到困惑,因为我认为您所需要的只是尝试设置 doctype 以建立通用标准模式。在我们的例子中,文档类型上方有空格,它只是前半部分:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 过渡//EN" " http://www.w3.org/TR/html4/loose.dtd ">
所以这就是我们实际拥有的:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 过渡//EN" >
这可能是怪癖模式的原因,但我认为 IE8(不确定 IE7 模式下的 IE8)只是寻找任何旧的 doctype 来建立标准模式,并且它允许在 doctype 前面有空格。更不用说我认为第二部分是针对验证者的。无论如何,我仍然不明白为什么全球空间被核爆了。它也可能是带有不正确 HTML 位置的表格(错误的标签,而不是嵌套失败)。
- 可能不相关,但 java 模板是一场彻底的灾难。嵌套包括与 ajax 请求混合,提供嵌套 9 层的内容。您必须查看几十个 XML、JSP 和 Java 文件才能弄清楚这个页面是如何构建的。6个XML配置文件只是为了整理一个模态等等......
我已经排除的事情:
没有以不同方式设置元标记的条件 IE 注释。您可以在非 IE 浏览器中看到相同的响应标头。
混合中没有帧或 iframe 导致此问题。如果有的话,我不希望窗口对象属性携带相同的值。
窗口对象似乎没有以任何方式被破坏或覆盖。
不,在这个特定的代码库中没有什么比咖啡脚本更近的了。它主要是原型和通过内联脚本直接插入到 JS 中的 taglib 数据的邪恶联合,以及主要由通才/服务器端开发人员编写的一堆非常糟糕的 JavaScript。
我不认为这是一个内存问题,尽管我还没有尝试过分析它。我已经在页面上花费了足够的时间来知道它相当稳定。鉴于在页面甚至可以加载之前必须在服务器上解决的大量废话,性能很糟糕,但是当页面打开时,我并没有耗尽内存或崩溃/冻结或任何事情。这是一个使用率很高的页面,我们正在为生产中的汽车经销商提供服务,所以我认为不需要一台 ace 机器来处理这个页面,否则我们会听到更多关于它的信息。
我还没有弄清楚在我们的开发版本的代码库中我需要去杀死正在设置文档类型的负载均衡器设置等效项,但它可能是链接文件中的 quirksmode 内联 HTML JavaScript 和 IE7 JavaScript 导致某种破坏全球空间的冲突?但是你如何在不破坏窗口对象的情况下对全局空间进行核攻击呢?或者我不知道的prototype.js的某些方面?