1

我正在开发一个可以嵌入许多网站的调查邀请。为了展示邀请,我使用了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。有一些网站可以加载它们,我不必加载它们,它又可以工作了。

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

如何在 Javascript 中动态卸载/替换原型和/或 script.aculo.us?是否可以?

4

3 回答 3

2

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

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

于 2009-06-11T12:35:30.647 回答
2

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

于 2009-06-11T12:43:56.147 回答
1

好吧,我的一些同事建议在我的 (1.6.0) 原型中为函数“命名空间”,例如在它们前面加上“__mySite”。然而,这意味着大量的重构工作,因为我还必须更新对重命名函数的调用。

于 2009-06-11T13:07:30.693 回答