包括Prototype.js两次导致IE7冲突

时间:2010-07-09 17:26:46

标签: javascript internet-explorer prototypejs explorer

我正在使用Prototype javascript框架。我已经将它包含在一个javascript代码段中,我允许人们复制并粘贴到他们的网站上。他们的网站可能已经包含Prototype,或者他们希望多次包含该代码段。在这两种情况下,Prototype将被定义两次,因此IE7将不起作用。几乎任何Prototype库函数调用都会说“Object不支持这个属性或方法”。我试过这个:

if (typeof(Prototype) === 'undefined') {
   alert('including Prototype');
   // minified Prototype code here
}
alert('running my code');
// all my code here

当我运行它时,只有“包括原型”被警告,但“运行我的代码”从未得到警报。为什么呢?

1 个答案:

答案 0 :(得分:1)

  

只有“包括原型”被警告,但“运行我的代码”从未得到警报。为什么呢?

我不知道如果没有看到代码 - 你在JavaScript错误控制台中得到了什么吗? - 但是一种可能性是代码中的某些东西依赖于在一个朴素的全局范围内。例如,function语句可能不会在标准ECMAScript中的if内使用。如果您尝试实际发生的事情取决于浏览器,但通常它可能会覆盖以前声明的函数版本,即使if子句未评估true

这个问题可以通过将Prototype放在自己的<script>块中来解决,该块在主脚本执行之前通过DOM方法或document.write插入到页面中。但是:

  

我已将其添加到javascript代码段中,我允许其人员复制并粘贴到他们的网站上。

是的,我真的不会这样做。在单个页面上使用多个范围广泛的侵入式框架(如Prototype或jQuery)是冲突和可能难以调试的问题。 (与同一框架的两个副本/版本相同。)

如果您是一个可用的片段,那么您是另一位网站管理员的客人,需要尽可能减少占用空间。 IMO意味着你不应该使用任何框架。

相关问题