使用Prototype的Ajax.Updater进行JavaScript内存丢失?

时间:2011-04-12 13:02:54

标签: javascript prototypejs

我不确定这是一个Prototype特定的问题,但是因为我不使用Prototype时没有问题,我猜它是。

我正在使用Ajax.Updater将一些外部HTML附加到我的DOM树中。在外部文件中有一些脚本元素。由于我已将evalScripts选项设置为true,因此它们都会被评估。但是当我稍后尝试访问已在脚本元素中设置的对象时,它们不再存在。例如:

<script type="text/javascript">
    var test = true;
    console.log(test); // Works fine, obviously.
</script>

<input type="text" onkeydown="console.log(test)"> <!-- Throws an ReferenceError exception (test is not defined) when the event is fired. -->

如果我使用Ajax.Updater请求它,脚本元素将按预期运行,但在评估之后,测试变量似乎被删除。谁知道发生了什么?

1 个答案:

答案 0 :(得分:1)

您可以使用

解决问题
<script type="text/javascript">
    window.test = true; // global on window
    console.log(test); // Works fine, obviously.
</script>

Ajax.Updater最终将在您的脚本上调用它:

function evalScripts() {
    return this.extractScripts().map(function(script) { return eval(script) });
}

由于eval在本地工作,您会发现var test实际上是function(script) { ... }

的局部变量

这是你的问题。原型没有像jQuery那样进行全局性攻击,这是一个问题。

你可以努力寻找它或者碰撞这个ticket