Toon posts:

[JavaScript] innerHTML in DIV van parent

Pagina: 1
Acties:
  • 305 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Ik heb de volgende code (doc1.htm):
code:
1
2
<IFRAME src="writeContent.htm" style="visibility:hidden"></IFRAME>
<DIV id="content"></DIV>

En in writeContent.htm staat (o.a.) de javascript code:
code:
1
parent.content.innerHTML="Hello world";

Hij moet dus 'Hello world' in de DIV van het parent document (doc1.htm) zetten. Maar dat doet ie niet! Waarom? Dit is toch hartstikke logisch zo?? :?

  • André
  • Registratie: Maart 2002
  • Laatst online: 14:07

André

Analytics dude

Probeer eens top.framenaam.document.getElementById("content").innerHTML = "Bla"
:P

Verwijderd

Topicstarter
Met die 'parent' bedoel ik dus dat ik 'uit' het iframe wil komen, niet dat ik naar een andere frameset spring.
code:
1
2
3
4
5
6
7
document
  |
  +--- IFRAME
  | |
  | +--- fillContent.htm
  |
  +--- DIV (content)

Als ik 't goed begrijp, ga je met 'parent' 1 niveau omhoog, dan zit je dus bij 'document', dan de DIV-naam: 'content'. Blijkbaar niet dus?!? :? *ARGH* Ik werk al jaren met HTML & JS, en dit lukt gewoon niet! :(

Verwijderd

Topicstarter
Ik heb het probleem al een beetje gereduceerd:

Als ik vanuit een IFRAME aanroep: parent.document.write, dat werkt ook niet???? (slash: doet niks)
Een opener.document.write werkt ook niet, wtf heeft een iframe dan?

Plain vanilla document.write schrijft in het iframe zelf. Maar ik wil erbuiten schrijven!

Verwijderd

probeer eens parent.frames['framenaam'].body.innerHTML += 'bla'; :)

[edit]
Nee dat is niet goed natuurlijk, ik moet beter lezen :)
code:
1
parent.document.getElementById('content').innerHTML += 'bla';

Verwijderd

Topicstarter
Nope, ik wil trouwens niet vanuit doc1.htm naar de iframe schrijven, maar andersom. (de DIV 'content' is uiteraard geen frame).

Met nog wat experimenteren kwam ik erachter dat ik vanuit de iframe (fillContent.htm) niet eens de titel kan laten zien van het 'parent' document met: alert(parent.document.title); (wel die van zichzelf met alert(document.title);)

Een willekeurige andere alert (alert('bla')) werkt wel, dus hij komt wel degelijk langs die code fietsen.

Ik spring bijna 't raam uit! :'(

edit:

Ik zag de verbetering, maar die werkt ook niet; de iframe heeft blijkbaar niet de parent die je zou verwachten... :?

Verwijderd

Topicstarter
IK HEB DE OPLOSSING! (Voor de geïnteresseerden & volgens W&G FAQ)
code:
1
parent.window.content.innerHTML='bla';

*window*, niet *document*. :P

(Ik had toch wel verwacht dat jullie Tweakers hiermee op de proppen zou komen. Moet ik 't toch weer zelf doen! :+)

edit:
smiley :)

Verwijderd

Niet om je af te kraken hoor, maar
code:
1
parent.document.getElementById(id).innerHTML

werkt wel degelijk. Het is IMHO ook meteen de enige juiste methode.

parent.window heeft volgens mij nooit nut, aangezien dat hetzelfde is als parent

En vanuit een window object direct een DOM-object aanspreken is uiterst ranzig, ik denk dat dit ook alleen in IE werkt.

  • Annie
  • Registratie: Juni 1999
  • Laatst online: 25-11-2021

Annie

amateur megalomaan

Ik ben idd benieuwd met welke browser dit alles getest is.
Als ik even logisch het object-model naloop kom ik ook op niets anders uit dan wat Cheatah hierboven zegt.

Today's subliminal thought is:


Verwijderd

Topicstarter
Op woensdag 03 april 2002 20:05 schreef Cheatah het volgende:
Niet om je af te kraken hoor, maar
code:
1
parent.document.getElementById(id).innerHTML

werkt wel degelijk. Het is IMHO ook meteen de enige juiste methode.

parent.window heeft volgens mij nooit nut, aangezien dat hetzelfde is als parent

En vanuit een window object direct een DOM-object aanspreken is uiterst ranzig, ik denk dat dit ook alleen in IE werkt.
IFRAMES werken sowieso alleen onder IE (laatste keer dat ik checkte *D).

Heb je dat stuk code ook werkelijk *geprobeerd*???? Dit werkt niet bij mij: "'content' is niet gedefinieerd" zegtie dan (hierbij heb ik jouw 'id' vervangen door de content DIV naam.

Mijn code is (werkend onder IE6, en de rest van de familie IE ook, we hebben 't toch over IFRAMES):

DOC1.HTM
code:
1
2
3
4
5
6
<HTML>
<BODY>
  <IFRAME src="fillContent.htm"></IFRAME>
  <DIV id="content">...</DIV>
</BODY>
</HTML>

FILLCONTENT.HTM
code:
1
2
3
4
<HTML>
<BODY onload="parent.window.content.innerHTML='YESSS';">
</BODY>
</HTML>

Dit *werkt*. Het interesseert me weinig wat W3C ervan vindt, maar als 't niet onder MSIE werkt ('t zijn de M$ IFRAMES die hier de regels bepalen), dan vind ik 't gewoon fout.

Verwijderd

Ik heb het inderdaad geprobeerd, het werkte prima met IE6, dus ik snap ook niet waarom het bij jou niet goed zou werken.
Ik neem aan dat je 'content' voor [b]id[/i] hebt ingevuld? (mét quotes)

Verwijderd

Topicstarter
Well I'll be damned. *Quotes*

Dat doet ie. En ik moet eerlijk toegeven, jouw oplossing is een stuk eleganter.

I'd say a 'Thank you' is in order.

Thank you *D

Verwijderd

Topicstarter
Uh... uh oh....

Lokaal werkt ie wel, maar die IFRAME bevat code van een andere server. Ik krijg dus 'access denied'. *ARGH* :(

Ik denk eraan om de inhoud van de iframe vanuit de parent te kopieren naar de content DIV. Maar dat zoek ik zelf wel uit... tenzij... ;)

  • Annie
  • Registratie: Juni 1999
  • Laatst online: 25-11-2021

Annie

amateur megalomaan

Als de content van twee verschillende domeinen afkomt dan moet ik je teleurstellen. In javascript is het niet mogelijk om objecten van andere domeinen aan te spreken.
Dus dan zal je aan een server-side oplossing moeten denken als je echt de content wil bewerken.

Today's subliminal thought is:


Verwijderd

Topicstarter
Het probleem is:
* Ik moet een ***tool van Philips gebruiken
* Die heeft geen frames
* Je kunt 'eigen' dynamische content maken d.m.v. een IFRAME te plaatsen
* Maar IFRAME heeft scrollbars
* Scrollbars zijn lelijk, zeker wanneer je er 2 naast elkaar hebt aan de rechterkant (van parent en iframe)

* Het enige wat ik wil is dat die verdwijnen (externe source rechtsstreek in DIV laden? IFrame van binnenuit resizen?)

* Een DIV heeft geen scrollbars: ideaal
* Ik zou eventueel ook 'andersom' kunnen werken (dus niet 'vanuit' de iframe werken, maar de tekst rippen vanaf het parent document) Ook goed, maar ik krijg voorlopig alleen nog maar "Access Denied" meldingen

:'( Mijn afstudeerproject hangt hier vanaf... Ik MOET een statische ***tool gebruiken, maar ik WIL dynamische content; die MOET dus van een andere server komen...

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 29-08 19:47

Bosmonster

*zucht*

je kunt de scrollbars van een iframe toch uitzetten? Anders is het resultaat van je afstuderen dat het niet gaat :P

Ken ook.. plak je der een advies aan vast wat betreft die ***tool van Philips ;)

Verwijderd

een iframe hoeft geen scrollbars te hebben:
code:
1
<iframe src='blaat.htm' width="300" height="350" scrolling='no' frameborder="no"></iframe>

of zoals het eigenlijk hoort:
code:
1
<iframe src='blaat.htm' style="width:300px; height:350px; overflow: hidden: border: none;"></iframe>

Verwijderd

Topicstarter
Scrollbars uitzetten kan natuurlijk wel, maar dan valt er vanalles buiten de boot (...eh frame :+)

Is window.resizeTo (oid) ook van toepassing op IFRAMES? Dat zou nog een oplossing kunnen zijn... :?

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 29-08 19:47

Bosmonster

*zucht*

Dus je probleem is dat de enige mogelijkheid die de tool biedt lelijk is..

Dan is dat toch jammer? Is dan toch onderdeel van je onderzoek, dat het beter kan door blabla bla..

Maar goed.. zonder het volledige systeem te zien/kennen is het ook moeilijk te bekijken of er andere oplossingen zijn...

Verwijderd

Topicstarter
Dat werkt! Maarja... Moet ik wel kunnen bepalen hoe groot de inhoud wordt.... clientWidth, innerWidth??? FF proberen! :P

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 29-08 19:47

Bosmonster

*zucht*

Dit *werkt*. Het interesseert me weinig wat W3C ervan vindt, maar als 't niet onder MSIE werkt ('t zijn de M$ IFRAMES die hier de regels bepalen), dan vind ik 't gewoon fout.
Iframes zijn W3C. Ze zijn alleen ooit verzonnen door MS. W3C heeft dit briljante idee netjes overgenomen (zoals vele andere als CSS hover). Vandaar dat bijvoorbeeld ook NS6/Mozilla dit gewoon ondersteunt.
Dat werkt! Maarja... Moet ik wel kunnen bepalen hoe groot de inhoud wordt.... clientWidth, innerWidth??? FF proberen!
Vind het knap dat je de afmetingen van de iframe aan kunt passen in een document van een ander domein (vanuit de iframe zelf)... Volgens mij test je lokaal :P

Verwijderd

Topicstarter
W3C + IFRAME = mooi! *D

Ik resize de IFRAME tijdens onload van zichzelf. Dan werkt... echt waar ;) Ik probeer nu de inhoud van de pagina in een DIV te zetten, en daarvan de style.width te verkrijgen... maar die is leeg. (Niet NULL of undefined of empty, maar *leeg*... hmmm) Dit zou toch allemaal dynamisch moeten werken, toch??

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 29-08 19:47

Bosmonster

*zucht*

Snap dan niet helemaal wat je wel en niet kan.. je kan blijkbaar zelf een complet stuk code invoegen?? Dan kan die div toch ook gewoon??

Verwijderd

Topicstarter
Tijd voor wat ASCII art! :)
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
Situatie 1 (hoe 't begon)

+-DOC op SERVER [A]-----------------------+
|                            |
|  [IFRAME]-DOC op SERVER [B]--------+    |
|  | JS: { copy <TAGS> naar     |    |
|  |     DIV(content) in parent }; |    |
|  |                       |    |
|  +---------------------------------+    |
|                            |
|  <DIV id='content'></DIV>        |
|                            |
+-----------------------------------------+

Dit werkt dus blijkbaar niet: copy van ene naar andere server werkt niet.
Ok, dan maar anders:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Situatie 2 (huidig)

+-DOC op SERVER [A]-----------------------+
|                            |
|  [IFRAME]-DOC op SERVER [B]--------+    |
|  | JS:{copy <TAGS> naar DIV;   |    |
|  |     vraag width&height van DIV; |    |
|  |     resize IFRAME naar grootte  |    |
|  |     van DIV; };             |    |
|  |                       |    |
|  | <DIV id='content'></DIV>     |    |
|  +---------------------------------+    |
|                            |
+-----------------------------------------+

Zo spring ik dus niet tussen de 2 servers. Blijft alleen de kwesite nog over dat ik geen waarde terug krijg wanneer ik de grootte van de <DIV> opvraag.

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 29-08 19:47

Bosmonster

*zucht*

Zet de breedte eens vast van de Div (anders wordt het een zooitje) en probeer eens de object.offsetHeight (dus ZONDER style!)

Verwijderd

Topicstarter
offsetHeight werkt perfect! YESSSS!!!! THANK YOU!!!!

World domination is only one step away... 8-)

  • Annie
  • Registratie: Juni 1999
  • Laatst online: 25-11-2021

Annie

amateur megalomaan

/offtopic:
Welke tool gebruik je en voor welk Philips onderdeel? Ik doe namelijk ook het eea voor Philips en ben wel benieuwd. Kan ik negatieve adviezen geven als zij ook de tool willen gaan gebruiken ;).
Of is dat staatsgeheim?

Today's subliminal thought is:


  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 29-08 19:47

Bosmonster

*zucht*

Frontpage Express 1.0 beta ;)

Of gebruikte Philips niet Interwoven ofzo? Das toch ook een kutpakket.

Verwijderd

Topicstarter
Is een tool van Diamond en 'werkt' onder Lotus Notes. Het is enkel in staat om statische pagina's te maken. Er zitten wel leuke dingen in als 'Nieuws updates' enzo, maar als je wat verder wil, dan moet je dus een IFRAME gebruiken (het ding heeft geen frameset, dus daar kan je ook al nix mee).
Bovendien, ALS je een iframe gebruikt, kan je niet meer zoeken over de gehele site, vandaar dat ik nu dus ALLES in iframes wil doen, met een eigen zoekfunctie, etc

Als je bij Philips werkt, ga dan es naar deze intranet page (werkt niet daarbuiten): [url="http://***.philips.com/apps/p_dir/e*******.nsf"]http://***.philips.com/apps/p_dir/e*******.nsf[/url]

edit:
Strax heb ik 'n proces aan m'n broek! :D

  • Annie
  • Registratie: Juni 1999
  • Laatst online: 25-11-2021

Annie

amateur megalomaan

ah, IPS, that does ring a bell.
zo te horen mag ik blij zijn dat we daar geen gebruik van maken. :+

Today's subliminal thought is:


Verwijderd

Topicstarter
Dat is eigenlijk wereldwijd Philips standaard (of dat gaat 'ie in ieder geval worden volgens Corporate IT). Dus bereid je maar alvast voor! ;)
Pagina: 1