我不确定这是一个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请求它,脚本元素将按预期运行,但在评估之后,测试变量似乎被删除。谁知道发生了什么?
答案 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。