我正在使用 Prototype javascript 框架。我已将其包含在 JavaScript 代码片段中,允许人们将其复制并粘贴到他们的网站上。他们的网站可能已经包含原型(prototype),或者他们想多次包含该片段。在这两种情况下,Prototype 都会被定义两次,因此 IE7 将无法运行。几乎所有 Prototype 库函数调用时都会显示“对象不支持此属性或方法”。我试过这个:
if (typeof(Prototype) === 'undefined') {
alert('including Prototype');
// minified Prototype code here
}
alert('running my code');
// all my code here
当我运行此命令时,仅收到“包括原型(prototype)”警报,但“运行我的代码”从未收到警报。为什么?
最佳答案
only "including Prototype" was alerted, but "running my code" never got alerted. Why?
如果没有看到代码,我不知道——你在 JavaScript 错误控制台中得到任何东西吗?——但一种可能性是代码中的某些内容依赖于未经修饰的全局范围。例如function
语句不得在 if
内使用在标准 ECMAScript 中。如果您尝试,实际发生的情况取决于浏览器,但通常它可能会覆盖先前声明的函数版本,即使 if
子句不评估 true
.
这个问题可以通过将 Prototype 放在自己的 <script>
中来解决在主脚本执行之前通过 DOM 方法或 document.write 插入页面的 block 。但是:
I have included it in a javascript code snippet that I allow people to copy and paste onto their websites.
是的,我真的不会这么做。在单个页面上使用多个广泛的、侵入性的框架(例如 Prototype 或 jQuery)会导致冲突和潜在的难以调试的问题。 (与同一框架的两个副本/版本相同。)
当您是可粘贴的片段时,您是另一个网站管理员家里的客人,需要尽可能减少占地面积。 IMO 这意味着您不应该使用任何框架。
关于javascript - 两次包含 Prototype.js 会导致 IE7 中发生冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3215063/