iframe.innerHTML bleibt immer leer
Ben
- javascript
0 Christoph Schnauß
Grüße,
ich brüte heute über einer Sache, von der ich eigentlich ausging, das es kein Ding sei, das zu programmieren. Langsam weiss ich nu aber nicht mehr weiter.
Ziel ist es, nur mittels JS dynamisch eine Seite unsichtbar zu laden (durch öffnen in einem iFrame) um den Inhalt danach weiterzuverarbeiten.
Mein Problem ist jedoch, dass die aus innerHTML gefüllte Variable immer leer ist. Sieht hier vielleicht jemand, woran das liegt?
Um etwaige Ladezeiten zu überbrücken hab ich das auslesen des iFrame schon in eine Schleife nach onLoad gepackt, nützt aber auch nichts.
Es funktioniert weder bei lokalen-, noch bei Webseiten, weder im IE noch im FF.
Wäre dankbar für einen Fingerzeig!
-Ben
<html><head><title>Test</title>
</head><body onLoad="weiter()">
<script type="text/javascript">
// Dies und das
var max = 10;
var cnt = 0;
var Code = "";
// Zu lesende URL aus Skript-URL herausholen
var ProgUrl = document.URL;
var SubUrlBeginn = ProgUrl.indexOf("?");
var SubUrl = ProgUrl.substring(SubUrlBeginn+1);
document.write('<iframe id="ContentFrame" src="'+SubUrl+'" width="1" height="1" style="visibility:hidden;"></iframe>');
//var Code = document.getElementById("ContentFrame").innerHTML;
//alert(Code);
function weiter()
{
Code = document.getElementById("ContentFrame").innerHTML;
if((Code == "") && (cnt < max))
{
cnt++;
setTimeout('weiter()',300);
}
if(Code != "")
window.alert(Code);
}
</script>
</body></html>
P.S.: Bitte keine Diskussion um rechtliche und ethische Vertretbarkeit solcher Techniken. Es geht ausschließlich um die Verwendung eigener Inhalte auf eigenen Seiten.
Und fragt bitte auch nicht, warum man das mit JavaScript machen muss... ich hab am heftigsten mit dem Kopf geschüttelt, als ich's erfahren hab ...
hallo,
Mein Problem ist jedoch, dass die aus innerHTML gefüllte Variable immer leer ist.
Nicht unbedingt.
document.write('<iframe id="ContentFrame" src="'+SubUrl+'" width="1" height="1" style="visibility:hidden;"></iframe>');
Wie soll etwas sichtbar werden (und in eine Variable übernommen werden können), was eh unsichtbar ist?
Es geht ausschließlich um die Verwendung eigener Inhalte auf eigenen Seiten.
Ahso. Na gut.
Und fragt bitte auch nicht, warum man das mit JavaScript machen muss...
Warum mußt du das mit Javascript machen? Wer soll es denn anzuschauen bekommen?
Grüße aus Berlin
Christoph S.
Moin,
Mein Problem ist jedoch, dass die aus innerHTML gefüllte Variable immer leer ist.
Nicht unbedingt.
öh, doch, is sie ... ist sie nicht? Doch!... oder?
document.write('<iframe id="ContentFrame" src="'+SubUrl+'" width="1" height="1" style="visibility:hidden;"></iframe>');
Wie soll etwas sichtbar werden (und in eine Variable übernommen werden können), was eh unsichtbar ist?
Naja gut, das Element ist unsichtbar, aber trotzdem vorhanden und dementsprechend sollte sie auslesbar sein.
Ich habs aber auch mit dem Element sichtbar probiert!
Und fragt bitte auch nicht, warum man das mit JavaScript machen muss...
Warum mußt du das mit Javascript machen? Wer soll es denn anzuschauen bekommen?
Jetzt haste ja doch gefragt :P
Es geht um die Anzeige einiger Inhalte aus einer Projektdokumentation in einer anderen Projektdokumentation.
Die CMS sind unterschiedlich und ne Serverseitige Sprache steht mir dafür nicht zur Verfügung... Die Alternative wär, ein Plugin für das Monster Confluence zu schreiben, was sicher dirty, aber nicht quick wär (mal davon abgesehen, dass Plugins auch nicht erwünscht sind)...
*seufz* ;)
Hi,
document.write('<iframe id="ContentFrame" src="'+SubUrl+'" width="1" height="1" style="visibility:hidden;"></iframe>');
Wie soll etwas sichtbar werden (und in eine Variable übernommen werden können), was eh unsichtbar ist?
Naja gut, das Element ist unsichtbar, aber trotzdem vorhanden und dementsprechend sollte sie auslesbar sein.
das ist es auch. Du erhältst ja auch das korrekte Ergebnis: Das <iframe>-Element hat keinen Inhalt (der End-Tag beginnt exakt nach dem Ende des Start-Tags), und somit ist innerHTML leer. Alles läuft absolut korrekt.
Cheatah
hallo Ben,
Naja gut, das Element ist unsichtbar, aber trotzdem vorhanden und dementsprechend sollte sie auslesbar sein.
"Sie" ist die Variable, in der das unsichtbare Element steckt. Natürlich ist "sie" auslesbar. Und "sie" zeigt dir ja auch genau das, was sie enthält: nämlich ein unsichtbares Nichts. Perfekt.
Ich habs aber auch mit dem Element sichtbar probiert!
Wie - was hast du da probiert?
Dein Code, den wir bisher kennen, ist eigentlich wenig fehlerbehaftet - na gut, man könnte natürlich fragen, warum es denn unbedingt ein iFrame sein muß.
In Ergänzung zu dem, was Cheatah bereits sagte: nimm deinem Code doch bitte nicht übel, daß er genau das brav anzeigt, was du "gecodet" hast. Wenn dir nun trotzdem nicht gefällt, was du da siehst, ist das nicht Sache deines Codes, sondern Sache deiner hoffentlich ausreichend vorhandenen grauen Zellen.
Es geht um die Anzeige einiger Inhalte aus einer Projektdokumentation in einer anderen Projektdokumentation.
Die CMS sind unterschiedlich und ne Serverseitige Sprache steht mir dafür nicht zur Verfügung...
Oh. Aha.
Die Alternative wär, ein Plugin für das Monster Confluence zu schreiben
och komm ... wenn du solche Überlegungen anstellen kannst, wird es dir doch gewiß nicht schwer fallen, dein kleines Javascript-Problem zu lösen ;.)
Grüße aus Berlin
Christoph S.
Guten Tag noch mal.
Wie - was hast du da probiert?
So etwa: sowohl mit lokaler als auch entfernter Datei:
<html><head><title>Test</title>
</head><body onLoad="weiter()">
<iframe id="ContentFrame" src="http://www.google.de" width="300" height="100"></iframe>
<script type="text/javascript">
// Dies und das
var max = 10;
var cnt = 0;
var Code = "";
//var Code = document.getElementById("ContentFrame").innerHTML;
//alert(Code);
function weiter()
{
Code = document.getElementById("ContentFrame").innerHTML;
if((Code == "") && (cnt < max))
{
cnt++;
setTimeout('weiter()',300);
}
if(Code != "")
alert(Code);
}
</script>
</body></html>
Dein Code, den wir bisher kennen, ist eigentlich wenig fehlerbehaftet - na gut, man könnte natürlich fragen, warum es denn unbedingt ein iFrame sein muß.
Interessante Frage! Was schlägst Du vor? in welche anderen Elemente kann ich dynamisch entfernte Webseiten laden (möglichst ohne Ajax)?
Natürlich stelle ich mir - und euch - die Frage, ob diese Vorgehensweise überhaupt richtig ist. Ich sehe, dass zwischen <iframe> und </iframe> nichts steht, ging aber davon aus, dass dieser Bereich zur Laufzeit mit der anderen Website gefüllt wird, der Firebug lässt es mich immerhin erahnen und so kenn ichs auch von Ajax.
Wie komme ich also an den Inhalt ran?
-Danke
Hi,
Wie - was hast du da probiert?
So etwa: sowohl mit lokaler als auch entfernter Datei:
Du hast auf Cheatahs Hinweis immer noch nicht reagiert -
<iframe id="ContentFrame" src="http://www.google.de" width="300" height="100"></iframe>
//var Code = document.getElementById("ContentFrame").innerHTML;
Was er aber hat (nachdem die Seite darin geladen ist), ist ein document, und das wiederum hat einen body ...
MfG ChrisB
Moinmoin,
Was er aber hat (nachdem die Seite darin geladen ist), ist ein document, und das wiederum hat einen body ...
Na und eben das ist es doch, was ich wissen musste!!!
Danke.
Allerdings klappts bei mir in FF mit document nicht (IE noch nicht getestet). Nach etwas rumsuchen im DOM mit Firebug hab ich dann herausgefunden, dass
Code = document.getElementById("ContentFrame").contentDocument.body.innerHTML;
das ist, was ich gesucht habe.
Danke, ChrisB.
Hi,
also ich finds etwas komisch das hier ein paar offensichtlich genau wussten wo das Problem liegt aber es wohl nicht uebers Herz brachten das konkret zu schreieben ...
Egal. Probier mal das:
Code = top.window.frames[X].document.body.innerHTML;
Das X kann hier eine Zahl sein, wenn du die kennst, du schriebst statt frames[X] z.B. "myInnerFrameName", was bei dir wohl besser is, da du den Code ja fix schreiben kannst.
Alles genauer unter ... [link=http://de.selfhtml.org/javascript/objekte/frames.htm]
Btw, das top.window.frames geht glaub ich auch als top.window.document.frames und noch ein paar Abwandlungen. Was da genau der Standard is musst selber nach lesen, weiss ich jez ned.
Viel Erfolg!