JS-Code per JS extrahieren und ausführen
Mareike
- javascript
Hallo zusammen,
ich hab folgenden HTML-Code:
<xmp id="update_p1">
<table id="p1">...</table>
<script type="text/javascript">
addWindowOnLoadFunction('layoutScrollPane("p1")');
</script>
</xmp>
Nun möchte ich per JS die Codezeile "addWindow..." extrahieren und per eval in einem anderen Frame ausführen. Ist das möglich, und wenn ja wie?
Tausend Dank,
Maike
Liebe(r) Mareike,
<xmp id="update_p1">
soso, das soll HTML-Code sein? Das ist XML! Hier ist es nicht unerheblich, wie Du an das XML-Dokument von der JavaScript-Seite her drankommst. Ist das ein XML-Response?
Nun möchte ich per JS die Codezeile "addWindow..." extrahieren und per eval in einem anderen Frame ausführen. Ist das möglich, und wenn ja wie?
Wenn sich im "anderen Frame" eine Seite derselben Domain befindet, dann wird sich die "same origin policy" nicht gegen das Ausführen der Funktion sperren.
Wie Du nun die entsprechende Code-Zeile "extrahieren" kannst... Dazu würde sich zunächst einmal getElementById("update_p1")
anbieten, um das XMP-Element zu "erreichen".
ungetesteter Ansatz:
function finde_und_fuehre_aus(xmlDoc) {
var xmp = xmlDoc.getElementbyId("update_p1");
var script = xmp.getElementsByTagName("script")[0];
var code = script.innerHTML;
return eval(code);
}
Diese Funktion braucht Dein XML-Dokument als übertragenen Parameter. Wie Du das löst, muss ich Dir überlassen, da Du dazu keine Angaben gemacht hast.
Liebe Grüße aus Ellwangen,
Felix Riesterer.
Hallo Felix.
<xmp id="update_p1">
soso, das soll HTML-Code sein? Das ist XML!
Äh, nein. Es ist HTML, wenn auch seeehr alt.
Einen schönen Montag noch.
Gruß, Mathias
Liebe(r) Mareike,
Liebe :-)
Das ist XML!
Nee, net wirklich - ist ein "altes" HTML-Tag. Siehe hier: http://de.selfhtml.org/html/text/praeformatiert.htm#aeltere_elemente
(näheres weiter unten)
Wenn sich im "anderen Frame" eine Seite derselben Domain befindet
Ja!
(näheres weiter unten)
ungetesteter Ansatz:
function finde_und_fuehre_aus(xmlDoc) {
var xmp = xmlDoc.getElementbyId("update_p1");
var script = xmp.getElementsByTagName("script")[0];
var code = script.innerHTML;
return eval(code);
}
Witzig, ich hatte prinzipiell den selben Code. Allerdings hatte ich statt "innerHTML" mit "nodeValue" und "data" gearbeitet, was wohl falsch ist. Dein Code funktioniert (sofern man statt "xmp" z.B. "div" verwendet). Danke erstmal!
So, jetzt muss ich aber glaub mein Vorhaben mal genauer angeben. Es geht um inkrementelle Seitenupdates. Ich hab ne Seite mit nem (unsichtbaren) IFrame, in den die HTML-Updates geladen (jeweils umrahmt von obigen "xmp"-Tags) und anschließend im Parent-Frame per JS ersetzt werden. Enhält so ein Update auch JS, so will ich es natürlich nicht im IFrame ausführen (deshalb "xmp" --> wird nicht interpretiert), sondern in dessen Parent. Das Problem ist nur, dass ich unterhalb von "xmp" nicht "navigieren" kann (eben da es nicht interpretiert wird).
Hast du vielleicht nen Lösungsvorschlag?
Gruß,
Maike
Lieb_e_ Mareike,
sorry für die missratene Anrede! Da habe ich mein Template nicht korrigiert. Aber wer kann sich heutzutage schon des wahren Genus seiner Forenmitstreiter(innen) so sicher sein?
Das ist XML!
Nee, net wirklich - ist ein "altes" HTML-Tag. Siehe hier: http://de.selfhtml.org/html/text/praeformatiert.htm#aeltere_elemente
Asche auf mein Haupt!
Es geht um inkrementelle Seitenupdates. Ich hab ne Seite mit nem (unsichtbaren) IFrame, in den die HTML-Updates geladen (jeweils umrahmt von obigen "xmp"-Tags) und anschließend im Parent-Frame per JS ersetzt werden.
Das hört sich doch nach einem Standard-Anwendungsfall für das XMLHttpRequest-Objekt an... Ich habe es auch erst seit ein paar Wochen in Gebrauch, um das Verzeichnis-Listing meines Webspaces bei Bedarf zu vervollständigen (Unterordner werden erst auf Anfrage mit Inhalt gefüllt, da die Seite sonst > 600kB würde).
Deine "inkrementellen Updates" klingen nach einer vergleichbaren Anwendung. Wäre das XMLHttpRequest-Objekt etwas für Dich?
Liebe Grüße aus Ellwangen,
Felix Riesterer.
Deine "inkrementellen Updates" klingen nach einer vergleichbaren Anwendung. Wäre das XMLHttpRequest-Objekt etwas für Dich?
Hmmm, hab ich mir fast schon gedacht, dass ich mich früher oder später damit auseinandersetzen muss. Bis jetzt hab ich davon aber noch keinen Plan...
Gruß,
Maike
Hallo Mareike.
Deine "inkrementellen Updates" klingen nach einer vergleichbaren Anwendung. Wäre das XMLHttpRequest-Objekt etwas für Dich?
Hmmm, hab ich mir fast schon gedacht, dass ich mich früher oder später damit auseinandersetzen muss. Bis jetzt hab ich davon aber noch keinen Plan...
Nachdem du diese Seite durchgelesen hast, dürftest du über alles notwendige Wissen verfügen.
Einen schönen Montag noch.
Gruß, Mathias
Lieber Mathias,
diese Seite ist sehr informativ. Aber auch die entsprechende Wikipedia-Seite zum XMLHttpRequest-Objekt ist ansehenswert.
Ich habe (ich glaube in diesem Forum) gelesen, dass man unbedingt sicherstellen muss, dass die serverseitige XML-Ausgabe mit einer UTF-8 Zeichenkodierung, und einem text/xml MIME-Typ ausgeliefert werden muss, da sonst Browser-spezifische Pingeligkeiten zuschlagen könnten.
Liebe Grüße aus Ellwangen,
Felix Riesterer.
Hi,
<xmp id="update_p1">
<table id="p1">...</table>
<script type="text/javascript">
addWindowOnLoadFunction('layoutScrollPane("p1")');
</script>
</xmp>
Das ist XML!
Nee, net wirklich - ist ein "altes" HTML-Tag.
HTML 2.0 kennt das XMP-Element noch, aber noch kein Script-Element. ==> HTML 2.0 ist es nicht.
HTML 4.0/HTML 4.01 kennen das XMP-Element nicht mehr, dafür aber das script-Element. ==> HTML 4.0 bzw. 4.01 ist es nicht.
Bliebe noch HTML 3.2.
Dort sind zwar beide Elemente bekannt, aber:
XMP ist noch bekannt, soll aber vermieden werden.
SCRIPT ist dort nur Platzhalter für zukünftigen Gebrauch.
Ok, könnte also noch passen.
Aber: für XMP und SCRIPT sind keine Attribute definiert in HTML 3.2, und für TABLE ist dort kein id-Attribut definiert.
==> ist auch kein HTML 3.2
Felix hatte also mindestens insofern recht, daß es sich nicht um HTML handeln kann ;-)
Ich seh jetzt auch nichts, was dagegen spricht, daß es XML ist.
cu,
Andreas