动态升级/替换原型库

时间:2009-06-11 12:17:12

标签: javascript prototypejs upgrade scriptaculous

我正在开发一个可以嵌入许多网站的调查邀请。要使用Modalbox来呈现邀请,这是一个javascript库,在半透明叠加层上显示动画模式框。

此Modalbox库依赖于Prototype和script.aculo.us/effects库。邀请将动态嵌入到我不拥有的网站中,并且无法静态修改其标记。

在加载时,我检查(在JS中)是否加载Prototype,如:

if (typeof Prototype == "undefined") {
    document.write('<script type="text/javascript" src="http://mysite.com/lib/prototype.js"><\/script>');
}

if (typeof Effect == "undefined") {
    document.write('<script type="text/javascript" src="http://mysite.com/lib/scriptaculous.js?load=effects"><\/script>');
}

一切都适用于大多数网站,因为它们通常不加载Prototype.js和script.aculo.us。有一些网站加载它们,我不需要加载它们再次起作用。

但是......有些网站已经加载了它们但是有OLDER版本(Modalbox需要Prototype 1.6.0和script.aculo.us 1.8.0),例如1.4.0 / 1.5.1

如何在Javascript中动态卸载/替换原型和/或script.aculo.us?有可能吗?

3 个答案:

答案 0 :(得分:2)

您可以在技术上做到这一点,但是您是否愿意冒险破坏页面的其余部分以便插件正常工作?可能有充分的理由说明这些网站未升级的原因 - 例如与不适用于较新版本的其他插件的兼容性。我建议您要么使用您的代码的网站拥有Prototype的最低版本(通过检查Prototype.Version),或者在找不到时将其包括在内。用Scriptaculous做同样的事。

这将允许您的代码用户决定如何最好地继续。要么他们可以升级他们的页面(很可能,因为旧版本可能因惯性而被使用)或放弃你的插件。

答案 1 :(得分:2)

作为对tvanfosson的回应,如果你能弄清楚如何动态更新到所需的原型,那么你也应该能够利用WTFFramework这样的东西来确定原始版本。然后在显示弹出窗口之前,加载原型,当弹出窗口关闭时重新加载原始原型。

答案 2 :(得分:1)

我的一些同事提出了“命名空间”我的(1.6.0)原型中的函数,例如在它们前面加上“__mySite”。但是,这意味着需要进行大量的重构工作,因为我还必须更新对重命名函数的调用。