2009-06-11 8 views
1

Ich entwickle eine Umfrage Einladung, die in vielen Websites eingebettet werden kann. Um die Einladung zu präsentieren, verwende ich Modalbox, eine Javascript-Bibliothek, die eine animierte modale Box über einem halbtransparenten Overlay zeigt.Dynamisch Upgrade/Ersetzung der Prototypbibliothek

Diese Modalbox-Bibliothek hängt von den Bibliotheken Prototype und script.aculo.us/effects ab. Die Einladung wird dynamisch in Websites eingebettet, die ich nicht besitze und deren Markup nicht statisch geändert werden kann.

Bei der Ladezeit I (in JS) überprüfen, ob Prototype wie geladen wird:

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>'); 
} 

Alle funktionieren gut mit den meisten Websites, da sie in der Regel nicht Prototype.js noch script.aculo laden. uns. Es gibt einige Seiten, die sie laden und ich muss sie nicht laden und wieder funktioniert es.

JEDOCH ... es gibt Websites, die sie bereits geladen haben aber ältere Versionen (Modalbox erfordert Prototype 1.6.0 und 1.8.0 script.aculo.us) wie 1.4.0/1.5.1

Wie kann ich Prototypen und/oder script.aculo.us in Javascript dynamisch entladen/ersetzen? Ist es möglich?

Antwort

2

Sie können dies möglicherweise technisch tun, aber sind Sie bereit, den Rest der Seite zu brechen, nur damit Ihr Plugin funktioniert? Es könnte gute Gründe dafür geben, dass diese Websites nicht aktualisiert wurden - z. B. die Kompatibilität mit anderen Plugins, die nicht mit neueren Versionen funktionieren. Ich schlage vor, dass Sie entweder die Sites, die Ihren Code verwenden, benötigen, um die Mindestversion von Prototype zu erhalten (indem Sie Prototype.Version untersuchen), oder sie wie Sie enthalten, wenn sie nicht gefunden werden. Mach dasselbe mit Scriptaculous.

Dies ermöglicht dem Benutzer Ihres Codes, Entscheidungen darüber zu treffen, wie am besten verfahren wird. Entweder können sie ihre Seite aktualisieren (am wahrscheinlichsten, da die ältere Version wahrscheinlich aufgrund von Trägheit verwendet wird) oder dein Plugin löschen.

2

Als Antwort auf tvanfosson, sollten Sie in der Lage sein, etwas wie die WTFFramework zu verwenden, um die ursprüngliche Version zu ermitteln, wenn Sie herausfinden können, wie Sie den erforderlichen Prototyp dynamisch aktualisieren. Laden Sie dann Ihren Prototyp, bevor Sie das Popup anzeigen, und laden Sie den ursprünglichen Prototyp neu, wenn Sie das Popup geschlossen haben.

1

Nun einige meiner Kollegen vorgeschlagen "Namespacing" die Funktionen in meinem (1.6.0) Prototyp zum Beispiel durch Voranstellen von ihnen mit "__mySite". Das würde jedoch viel Refactoring bedeuten, da ich auch die Aufrufe der umbenannten Funktionen aktualisieren muss.

Verwandte Themen