Richard Konrad wrote:
Quote:
Wenn in einem HTML-Document ein Stück Javascript vorkommt, wird dieses an
der entsprechenden Stelle auch ausgeführt.
Ladet man dem HTML-Code via XMLHTTPRequest, und steckt diesen via innerHTML
in einen Knoten, wird der Code nicht ausgeführt.
Wißt ihr, ob das so gewollt ist? |
IE verlangt (sogar laut Doku)
<http://msdn.microsoft.com/library/default.asp?url=/workshop/author/dhtml/reference/properties/innerhtml.asp>
dass man
<script type="text/javascript" defer>
verwendet, wenn man will, dass beim Setzen von innerHTML (oder auch bei
Benutzung von insertAdjacentHTML) der Script-Code in enthaltenen
script-Elementen ausgefuehrt wird:
"When using innerHTML to insert script, you must include the DEFER
attribute in the script element."
Andere Browser haben zwar gewisse Anstrengungen unternommen, innerHTML
zu unterstuetzen, aber das Ausfuehren von Script beim Setzen von
innerHTML funktioniert meines Wissens zur Zeit weder in Mozilla noch in
Opera.
Es gibt allerdings, je nach Anforderung einfache Wege, das zu umgehen,
z.b. kann man innerHTML fuer ein zur Zeit nicht im Dokument befindliches
Element setzen und dieses dann per W3C DOM (also appendChild,
replaceChild) ins Dokument einfuegen, dann klappt das mit der
Script-Ausfuehrung besser. Das eignet sich gut, wenn man z.b. bei
Benutzung von XMLHttpRequest ein Container-Element wie ein div-Element
hat, das nur dazu dient, das empfangene HTML-Schipsel aufzunehmen, also
<div id="div1"></div>
und im Script dann statt z.b.
var div = document.getElementById('div1');
div.innerHTML = someXMLHttpRequestInstance.responseText;
besser
var div = document.getElementById('div1');
var newDiv = div.cloneNode(false);
newDiv.innerHTML = someXMLHttpRequestInstance.responseText;
div.parentNode.replaceChild(newDiv, div);
IE braucht aber auch dafuer <script type="text/javascript" defer>.
--
Martin Honnen
http://JavaScript.FAQTs.com/