Setter/Getter crossbrowser erstellen
Cheatah
- javascript
Hi,
ich möchte den Setter und den Getter (insbesondere) von window.onload umbiegen. Für Geckos nur eine geringe Hürde:
window.onload setter = function(x) { alert(x); }
window.onload getter = function() { return true; }
Wie aber gehe ich für andere Browser vor? Der IE scheint bei HTML-Elementobjekten ein onpropertychange-Event zu kennen, welches man verwenden kann; dieses greift aber nicht beim window-Objekt. Was steht mir statt dessen zur Verfügung? Was mache ich mit Opera und der KHTML-Familie?
Cheatah
Hallo,
ich möchte den Setter und den Getter (insbesondere) von window.onload umbiegen.
Mit welchem Ziel? Nutzt du mehrere Scripte, die onload immer wieder überschreiben, obwohl mehrere Funktionen beim onload ausgeführt werden sollen?
Wie aber gehe ich für andere Browser vor?
Hm... Denk dir eine andere Strategie aus? ;) Nur Gecko unterstützt meines Wissens Getter und Setter und die anderen Browser nichts äqivalentes.
Du könntest freilich das Setzen von onload per Timer überwachen, aber das ist weder elegant und zuverlässig. Was uns wieder zu der Frage führt, wozu du Getter und Setter an dieser Stelle benötigst.
Mathias
Hi,
ich möchte den Setter und den Getter (insbesondere) von window.onload umbiegen.
Mit welchem Ziel? Nutzt du mehrere Scripte, die onload immer wieder überschreiben, obwohl mehrere Funktionen beim onload ausgeführt werden sollen?
ja, bzw. die Gefahr besteht. Die Alternative, anstatt onload eine eigene Funktion(alität) anzubieten, möchte ich erst in Angriff nehmen, wenn ich Getter/Setter ausschließen kann - der JavaScript-Code kann durch vielerlei Quellen eingebunden werden.
Wie aber gehe ich für andere Browser vor?
Hm... Denk dir eine andere Strategie aus? ;)
Ah ja, avoid the case *g*
Nur Gecko unterstützt meines Wissens Getter und Setter und die anderen Browser nichts äqivalentes.
Schade. Immerhin habe ich jetzt Klarheit; meines Erachtens bist Du hier im Forum der Kompetenteste, was JavaScript betrifft, insofern rechne ich nun nicht mehr mit Wundern. Danke für die Ernüchterung :-)
Du könntest freilich das Setzen von onload per Timer überwachen, aber das ist weder elegant und zuverlässig.
Stimmt, aber immerhin hatte ich in diese Richtung noch gar nicht nachgedacht.
Was uns wieder zu der Frage führt, wozu du Getter und Setter an dieser Stelle benötigst.
Ursächlich: Ich habe eine Funktion geschrieben, die notwendigerweise onload aufgerufen wird (ein hinreichend spätes Einbinden scheitert an der organisatorischen Praxis). Hat jetzt einer der vielen Entwickler, die dieses Script einzubinden haben, bereits das onload-Event verwendet - eventuell sogar unwissend, durch Vorgabe eines externen Partners - so haben wir ein Problem. Dieses lässt sich auch nur bedingt durch ein 'function addOnload()' o.ä. beheben, daher mein Ansatz, den Setter zu überschreiben. Anderen Vorschlägen gegenüber bin ich offen.
Cheatah
Hi,
Ursächlich: Ich habe eine Funktion geschrieben, die notwendigerweise onload aufgerufen wird (ein hinreichend spätes Einbinden scheitert an der organisatorischen Praxis). Hat jetzt einer der vielen Entwickler, die dieses Script einzubinden haben, bereits das onload-Event verwendet - eventuell sogar unwissend, durch Vorgabe eines externen Partners - so haben wir ein Problem. Dieses lässt sich auch nur bedingt durch ein 'function addOnload()' o.ä. beheben, daher mein Ansatz, den Setter zu überschreiben. Anderen Vorschlägen gegenüber bin ich offen.
Wie wärs mit sowas in der Richtung:
var oldonload = window.onload;
window.onload = DeinOnload;
function DeinOnload()
{
//dein Code vor dem anderen onload
if (oldonload)
oldonload();
//dein Code nach dem anderen onload
}
cu,
Andreas
Hi,
Wie wärs mit sowas in der Richtung:
im Prinzip ja, allerdings muss das dann wieder jeder selbst implementieren ...
var oldonload = window.onload;
... und es gibt 'ne ziemliche Inflation an Variablen ;-) Ich arbeite schon an eine objektorientierten Variante davon. Motto:
new EventCollectionHandler(window, ['load', 'resize']); // o.ä.
window.addOnload('foo()');
window.addOnload(bar);
window.addOnload(function() { ... });
window.addOnresize(new Function('', '...'));
// Färtsch.
Sollte eigentlich so machbar sein, wenn ich nicht irre. Das größte Problem wird das Objekt-Binding sein, aber das schaue ich mir von prototype.js ab.
Cheatah