2009-06-11 54 views
1

我正在開發可以嵌入到許多網站的調查邀請。爲了展示我使用的Modalbox的邀請,這是一個在半透明疊加層上顯示動畫模式框的JavaScript庫。動態升級/替換原型庫

這個Modalbox庫依賴於Prototype和script.aculo.us/effects庫。該邀請將動態地嵌入到我不擁有的站點中,並且不能靜態修改其標記。

在加載時我檢查(在JS),如果原型被加載,如:

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。我們。有一些網站加載它們,我不必加載它們,然後再次運行。

無論其... ...有一個已經加載它們,但有舊版本的網站(Modalbox需要原型1.6.0和script.aculo.us 1.8.0),如1.4.0/1.5.1

我如何動態卸載/替換原型和/或腳本script.aculo.us在Javascript中?可能嗎?

回答

2

您也許可以在技術上做到這一點,但是您是否願意冒險打破網頁的其餘部分,以便您的插件有效?這些網站爲什麼沒有升級可能有充分的理由 - 比如與其他不適用於新版本的插件的兼容性。我建議你要麼使用你的代碼的網站擁有Prototype的最低版本(通過檢查Prototype.Version),要麼在你沒有發現的時候包含它。對Scriptaculous也一樣。

這將允許您的代碼的用戶就如何最好地繼續進行決策。要麼他們可以升級他們的頁面(很可能,因爲舊版本可能由於慣性而被使用)或者放下你的插件。

2

對於tvanfosson,如果你能弄清楚如何動態更新到所需的原型,那麼你也應該能夠利用像WTFFramework這樣的東西來確定原始版本。然後在顯示彈出窗口之前,加載您的原型,並在彈出窗口關閉時重新加載原始原型。

1

那麼我的一些同事建議在我的(1.6.0)原型中使用「命名空間」功能,例如通過在「__mySite」前添加它們。但是這意味着很多重構工作,因爲我還必須更新對重命名函數的調用。