0

我最近继承了一个以各种方式拙劣的网站。我更像是一个 php 人,最初 js 工作得很好。我没有对 javascript 或任何包含文件进行任何更改,但在进行了一些内容编辑后,我收到了来自 firebug 的错误。

a.dispatchEvent is not a function
emptyFunction()protot...ects.js (line 2)
emptyFunction()protot...ects.js (line 2)
fireContentLoadedEvent()protot...ects.js (line 2)

[Break on this error] var Prototype={Version:'1.6.0.2',Brows...pe,Enumerable);Element.addMethods();
protot...ects.js (line 2)
this.m_eTarget.setStyle is not a function

[Break on this error] this.m_eTarget.setStyle( { position: 'relative', overflow:'hidden'} );
protot...ects.js (line 43)
uncaught exception: [Exception... "Component returned failure code: 0x80070057 (NS_ERROR_ILLEGAL_VALUE)" nsresult: "0x80070057 (NS_ERROR_ILLEGAL_VALUE)" location: "JS frame :: js/prototype_effects.js :: anonymous :: line 2" data: no]

谷歌搜索我发现一些帖子有时 jquery+prototype 不能很好地播放,重新排列脚本可以解决这个问题,但是由于我没有触及这些部分,我不确定我什至需要从哪里开始调试。以前的开发人员合并了一个 head.inc 文件,该文件加载原型,scriptaculous,然后许多页面在一个子模板中加载 jquery 用于灯箱等功能。

该站点临时位于http://dawn.mikeyhill.com

任何帮助表示赞赏。

4

1 回答 1

1

原型库是侵入性的:它将各种方法添加到 Javascript 的核心对象中。然后通过迭代对对象进行迭代时,for(var k in o)将包含这些新方法(因为 Javascript 尚不支持不可迭代的属性)。这就是为什么在 Prototype 中迭代总是通过诸如 each() 等不受此问题影响的工具来执行。

问题在于仍在使用旧的“for-var-in”循环的其他代码。此代码将中断。在 Prototype 不能与其他库一起工作的 99% 的情况下,问题是由于迭代造成的。

你是说你没有接触过代码,我相信你,所以这留下了三个选择:

  • 问题之前就存在,但你没有注意到
  • 有问题的代码仅在特殊情况下执行(由于某些特殊输入)。以前的程序员从未尝试过这种输入。
  • 您处于问题是由于其他一些因素造成的 1% 中:)
于 2010-03-18T23:25:48.720 回答