Hallo,
einpraegsam.net schrieb
Aber ich weiß immer noch nicht nicht warum sich prototype und mootools nicht mögen, bzw. was ich bei meinem eigenen JS verbessern kann um so etwas zu vermeiden...
einen konkreten Lösungsvorschlag habe ich nicht, aber gerade heute hat mich genau dieses Problem beschfätigt:
Ein Beispiel:
Auf einer Seite gibt es ein (Powermail-)Formular mit Upload-Möglichkeit und JS-Validierung.
Aufgrund des Upload-Felds, welches in jedem Browser anders breit angezeigt wird, lese ich mit Mootools die aktuelle Breite aus und setzte die anderen Input-Felder wie folgt:
window.addEvent('domready', function() {
var currentWidth = $('uid4').getSize().size.x-6;
$('uid1').setStyle('width', currentWidth);
$('uid3').setStyle('width', currentWidth);
});
Sobald die Validierung aktiviert ist, wird das Prototype-Framework geladen.
In Prototype gibt es aber auch eine Funktion setStyle, die leider eine andere Syntax, als in Mootools hat. Deshalb funktioniert das setzen der Breite nun nicht mehr.
Für Prototype müsste es wie folgt aussehen:
window.addEvent('domready', function() {
var currentWidth = $('uid4').getSize().size.x-6;
$('uid1').setStyle({width: currentWidth});
$('uid13).setStyle({width: currentWidth});
});
Mootools erst nach Prototype zu laden löst zwar das Problem mit der Breite, dann werden aber die Validation-Advices nicht mehr angezeigt, weil deren setStyle nicht mit Mootools kompatibel ist.
Mein erster Lösungsversuch war es, in prototype.js die Funktion "setStyle" in "PTsetStyle" umzubenennen und dann die Aufrufe in "effects.js", "dragdrop.js" usw. auch in PTsetStyle umzubenennen.
Das hat zwar prinzipiell funktioniert, ist aber keine schöne Lösung, da beim nächsten Update wieder alles weg ist. Zudem gibt es, so wie es aussieht noch weitere Überschneidungen in den Funktionsnahmen, sodass derzeit bei dieser Seite immer mehr Probleme auftreten.
Bei manchen Extensions kann man auswählen, ob man das Mootools oder Prototype-Framework verwenden will. Dann müsstest Du aber je nach Auswahl anderen JS-Files laden, die den jeweiligen Frameworks entsprechen. Oder Du programmierst eine Schnittstelle zu den Frameworks, also zB Wrapper-Funktionen für die benötigten Optionen. Dort rufst Du dann Deine Funktionen aus, die im Hintergrund je nach Framework die gewünschten Funktionsaufrufe machen. Das stelle ich mir aber wahnsinnig aufwändig vor. Bzw. müsste man nachschauen, wie das die andren Extension-Entwickler (die mehrere Frameworks anbieten) gehandhabt haben.
Jedenfalls bedeutet es vor allem für Dich als Extension-Entwickler mehr Aufwand, für den Benutzer der Extension hat es den Vorteil, dass nicht zwei Frameworks geladen werden müssen.
Viele Grüße
Andreas