window dekorieren – SELFHTML-Forum Forum als Ergänzung zum SELFHTML-Wiki und zur Dokumentation SELFHTML https://forum.selfhtml.org/self?srt=yes window dekorieren Wed, 26 Jan 11 12:58:11 Z https://forum.selfhtml.org/self/2011/jan/26/window-dekorieren/1491489?srt=yes#m1491489 https://forum.selfhtml.org/self/2011/jan/26/window-dekorieren/1491489?srt=yes#m1491489 <p>Hi,</p> <p>ich möchte dem IE7 etwas Funktionalität schenken, dazu müsste ich das window-Objekt dekorieren.<br> Konkret möchte ich dem IE7 window.attachEvent("hashchange") beibringen.</p> <p>Mein Problem ist nun attachEvent entsprechend zu erweitern.</p> <p>Was genau möchte ich erreichen:<br> Ich möchte wenn window.attachEvent aufgerufen wird eine eigene Methode ausführen und ggf. den Aufruf dann an die eigentlich window.attachEvent weiterleiten.</p> <pre><code class="block language-javascript">window<span class="token punctuation">.</span><span class="token function-variable function">attachEvent</span> <span class="token operator">=</span> <span class="token keyword">function</span><span class="token punctuation">(</span><span class="token parameter">eventName<span class="token punctuation">,</span> callback<span class="token punctuation">,</span> useCapture</span><span class="token punctuation">)</span><span class="token punctuation">{</span> <span class="token comment">// bei besonderem eventNamen etwas anderes machen </span> <span class="token keyword">if</span><span class="token punctuation">(</span>eventName <span class="token operator">==</span> <span class="token string">"hashchange"</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token function">alert</span><span class="token punctuation">(</span><span class="token string">"hashchange"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">return</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token comment">// bei allen anderen ganze normale Funktionalität </span> window<span class="token punctuation">.</span><span class="token function">attachEvent</span><span class="token punctuation">(</span>eventName<span class="token punctuation">,</span> callback<span class="token punctuation">,</span> useCapture<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> </code></pre> <p>Das funktioniert so selbstverständlich nicht, da ich ja die ursprüngliche .attachEvent nirgends mehr habe.<br> Diese würde ich nun gerne irgendwo speichern so dass ich dann etwas in der Art machen könnte:</p> <pre><code class="block language-javascript"><span class="token punctuation">(</span><span class="token keyword">function</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">{</span> <span class="token comment">// hier wird eine Referenz auf window.attachEvent gespeichert, eigentlich bräuchte ich eine Kopie </span> <span class="token keyword">var</span> oldAttachEvent <span class="token operator">=</span> window<span class="token punctuation">.</span>attachEvent<span class="token punctuation">;</span> window<span class="token punctuation">.</span><span class="token function-variable function">attachEvent</span> <span class="token operator">=</span> <span class="token keyword">function</span><span class="token punctuation">(</span><span class="token parameter">eventName<span class="token punctuation">,</span> callback<span class="token punctuation">,</span> useCapture</span><span class="token punctuation">)</span><span class="token punctuation">{</span> <span class="token keyword">if</span><span class="token punctuation">(</span>eventName <span class="token operator">==</span> <span class="token string">"bar"</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token function">alert</span><span class="token punctuation">(</span><span class="token string">"bar"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">return</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token comment">// hier sollte dann die ursprüngliche Funktion aufgerufen wird, da oben Copy by Ref erfolgte wird hier ein rekursiver Aufruf gestartet... </span> <span class="token function">oldAttachEvent</span><span class="token punctuation">(</span>eventName<span class="token punctuation">,</span> callback<span class="token punctuation">,</span> useCapture<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> </code></pre> <p>Das funktioniert so selbstverständlich auch nicht, weil bei Funktionen nur die Referenz zugewiesen wird.<br> Wie also könnte ich die Funktion kopieren?</p> <p>Oder wie kann ich die .attachEvent des window-Objekts ändern, ohne die normale Funktionalität komplett zu verlieren?</p> <p>Ist verständlich was ich versuche zu erreichen?</p> <p>~dave</p> window dekorieren Wed, 26 Jan 11 13:22:08 Z https://forum.selfhtml.org/self/2011/jan/26/window-dekorieren/1491492?srt=yes#m1491492 https://forum.selfhtml.org/self/2011/jan/26/window-dekorieren/1491492?srt=yes#m1491492 <blockquote> <pre><code class="block language-javascript"></code></pre> </blockquote> <p>(function(){</p> <blockquote> <p>// hier wird eine Referenz auf window.attachEvent gespeichert, eigentlich bräuchte ich eine Kopie<br>   var oldAttachEvent = window.attachEvent;<br>   window.attachEvent = function(eventName, callback, useCapture){<br>     if(eventName == "bar") {<br>       alert("bar");<br>       return;<br>     }<br>     // hier sollte dann die ursprüngliche Funktion aufgerufen wird, da oben Copy by Ref erfolgte wird hier ein rekursiver Aufruf gestartet...<br>     oldAttachEvent(eventName, callback, useCapture);<br>   }<br> })();</p> </blockquote> <pre><code class="block"> > > Das funktioniert so selbstverständlich auch nicht, weil bei Funktionen nur die Referenz zugewiesen wird. Doch das funktioniert. oldAttachEvent ist eine Referenz auch das alte Event. Struppi. </code></pre> window dekorieren Wed, 26 Jan 11 13:35:22 Z https://forum.selfhtml.org/self/2011/jan/26/window-dekorieren/1491490?srt=yes#m1491490 https://forum.selfhtml.org/self/2011/jan/26/window-dekorieren/1491490?srt=yes#m1491490 <p>Hi,</p> <blockquote> <pre><code class="block language-javascript"></code></pre> </blockquote> <p>(function(){</p> <blockquote> <p>// hier wird eine Referenz auf window.attachEvent gespeichert, eigentlich bräuchte ich eine Kopie<br>   var oldAttachEvent = window.attachEvent;</p> </blockquote> <pre><code class="block"> Warum solltest du eine „Kopie“ brauchen? Auch window.attachEvent ist nicht „die Funktion selber“, sondern nur eine Referenz auf diese. > ~~~javascript   window.attachEvent = function(eventName, callback, useCapture){ >     if(eventName == "bar") { >       alert("bar"); >       return; >     } >     // hier sollte dann die ursprüngliche Funktion aufgerufen wird, da oben Copy by Ref erfolgte wird hier ein rekursiver Aufruf gestartet... >     oldAttachEvent(eventName, callback, useCapture); >   } </code></pre> <p>Warum an *dieser* Stelle?<br> Du willst doch, dass die alte Funktionalität jedes Mal nach der neuen ausgeführt wird, oder? Dann gehört der Aufruf von oldAttachEvent mit in die anonyme Funktion hinein, nicht dahinter.</p> <p>MfG ChrisB</p> <div class="signature">-- <br> RGB is totally confusing - I mean, at least #C0FFEE should be brown, right? </div> window dekorieren Wed, 26 Jan 11 13:48:39 Z https://forum.selfhtml.org/self/2011/jan/26/window-dekorieren/1491491?srt=yes#m1491491 https://forum.selfhtml.org/self/2011/jan/26/window-dekorieren/1491491?srt=yes#m1491491 <p>Hi,</p> <blockquote> <p>Du willst doch, dass die alte Funktionalität jedes Mal nach der neuen ausgeführt wird, oder? Dann gehört der Aufruf von oldAttachEvent mit in die anonyme Funktion hinein, nicht dahinter.</p> </blockquote> <p>Sorry, mein Fehler - genau das war ja der Fall ...</p> <p>MfG ChrisB</p> <div class="signature">-- <br> RGB is totally confusing - I mean, at least #C0FFEE should be brown, right? </div> window dekorieren Wed, 26 Jan 11 13:38:42 Z https://forum.selfhtml.org/self/2011/jan/26/window-dekorieren/1491493?srt=yes#m1491493 https://forum.selfhtml.org/self/2011/jan/26/window-dekorieren/1491493?srt=yes#m1491493 <p>Hi,</p> <blockquote> <p>Doch das funktioniert. oldAttachEvent ist eine Referenz auch das alte Event.</p> </blockquote> <p>Man bin ich dämlich...<br> Keine Ahnung wie ich drauf komm dass das nicht funktioniert...</p> <p>Danke.</p> <p>~dave</p>