Toon posts:

getElementById() werkt niet in Mozilla?

Pagina: 1
Acties:

Verwijderd

Topicstarter
In een iframe wordt een pagina geladen die de volgende functie in de header heeft staan:

code:
1
2
3
4
5
function showFoto() {
    var newWindow=window.open("foto_achtergrond.html","newWindow","height=450,width=550");
    newWindow.document.getElementById("inhoud").innerHTML="[img]'fotos/zinkst1_full.jpg'><p><b>&copy;[/img]</p>";
    newWindow.focus();
}


en de inhoud van de body van html-file die door een aanroep van deze functie wordt geopend luidt simpelweg:

code:
1
2
<div id="inhoud" align="center">
</div>


IE 6 (of zo) doet wat je verwacht, die toont nl. het plaatje zinkst1_full.jpg in het nieuwe venster. Alleen Mozilla (1.5) doet dit niet en schrijft helemaal niets naar het nieuwe window toe. Ik begrijp het niet, getElementById wordt toch juist door Mozilla ondersteund :?? Iemand een idee?

  • André
  • Registratie: Maart 2002
  • Laatst online: 26-05 00:33

André

Analytics dude

Wat voor foutmelding geeft hij dan?

Ik denk dat op het moment dat jij de foto er in wil schrijven het nieuwe window nog niet klaar is om in geschreven te worden. Je zult dus een timeout moeten inbouwen, of nog netter: wachten op de onload.

Verwijderd

Topicstarter
Helemaal geen foutmelding eigenlijk...

Wat jouw idee betreft, hoe zou ik vanuit het window dat het nieuwe venster opent kunnen controleren wanneer hij klaar is om data te ontvangen? Ik weet wel dat je in een window een onload-commando in de <body> kunt zetten, maar ik zou het graag vanuit het openende window doen...

  • André
  • Registratie: Maart 2002
  • Laatst online: 26-05 00:33

André

Analytics dude

JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
function showFoto() {
  var newWindow=window.open("foto_achtergrond.html","newWindow","height=450,width=550");
  Check();
}

function Check() {
  if (newWindow.readyState == "complete") {
    newWindow.document.getElementById("inhoud").innerHTML="[img]'fotos/zinkst1_full.jpg'><p><b>&copy;[/img]</p>";
    newWindow.focus();
  } else {
    setTimeout("Check()", 1000);
  }
}

Ik weet zo niet of die readyState zo werkt, maar dit zou wel een methode kunnen zijn als je het vanaf de 'opener' wil doen ipv vanaf 'newWindow'.

Verwijderd

Topicstarter
Ik begrijp je punt, helaas werkt het niet ;(... IE geeft een foutmelding dat "newWindow" geen object is en blijft loopen in de Check() (denk ik, 100% cpu voor een aantal seconden) en in Mozilla nog steeds hetzelfde resultaat...

Is het niet mogelijk om in het geopende window in de <body> een onload event te zetten die een functie in het openende window aanroept?

  • André
  • Registratie: Maart 2002
  • Laatst online: 26-05 00:33

André

Analytics dude

Verwijderd schreef op 03 januari 2004 @ 23:25:
Ik begrijp je punt, helaas werkt het niet ;(... IE geeft een foutmelding dat "newWindow" geen object is en blijft loopen in de Check() (denk ik, 100% cpu voor een aantal seconden) en in Mozilla nog steeds hetzelfde resultaat...

Is het niet mogelijk om in het geopende window in de <body> een onload event te zetten die een functie in het openende window aanroept?
Dat kan wel:

code:
1
<body onload="window.opener.functieNaam();">

Verwijderd

Topicstarter
Ik heb het geprobeerd, maar nu begint IE weer te piepen als ik in functieNaam() het geopende windowtje bij zijn naam noem, is geen object :?... Maar goed, ik heb maar voor een andere oplossing gekozen door de nodige info mee te geven in de url van het windowtje wat geopend wordt, zodat ik toch de opbouw van de inhoud in het geopende windowtje zelf kan afhandelen. Dit werkt gelukkig ook in Mozilla :).

Bedankt voort je hulp :)

  • creative8500
  • Registratie: September 2001
  • Laatst online: 03-01 16:54

creative8500

freedom.

Geef voor het nageslacht ook nog even jouw zaligmakende code. :)

  • André
  • Registratie: Maart 2002
  • Laatst online: 26-05 00:33

André

Analytics dude

creative8500 schreef op 04 januari 2004 @ 00:18:
Geef voor het nageslacht ook nog even jouw zaligmakende code. :)
Hij geeft nu gewoon het plaatje mee als querystring. En om die uit te lezen gebruik je de location.href of de document.search:

HTML:
1
<a href="bla.html?plaatje=bla.jpg">Plaatje</a>


bla.html:
JavaScript:
1
alert(document.location.search);

[ Voor 31% gewijzigd door André op 04-01-2004 00:40 ]


  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

keesjeislief:
Ik begrijp je punt, helaas werkt het niet ;(... IE geeft een foutmelding dat "newWindow" geen object is en blijft loopen in de Check() (denk ik, 100% cpu voor een aantal seconden) en in Mozilla nog steeds hetzelfde resultaat...
Logisch dat IE 't niet snapt, newWindow is in André's voorbeeld een lokale variabele in showFoto (door var). Als je het in dat voorbeeld wilt laten werken zul je de newWindow als argument mee moeten geven aan Check ()
JavaScript:
1
2
3
4
5
6
7
8
9
function showFoto () {
   var newWindow = ...;
   ...
   check ( newWindow );
}

function check ( newWindow ) {
   // ...
}

of de newWindow een global maken
JavaScript:
1
2
3
4
5
var newWindow = null;
function showFoto () {
   newWindow = ...;
   check ()
}


maar de oplossing met location.search is imho ook netter.

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


  • Johnny
  • Registratie: December 2001
  • Laatst online: 13:29

Johnny

ondergewaardeerde internetguru

Verwijderd schreef op 03 januari 2004 @ 22:40:
Helemaal geen foutmelding eigenlijk...

Wat jouw idee betreft, hoe zou ik vanuit het window dat het nieuwe venster opent kunnen controleren wanneer hij klaar is om data te ontvangen? Ik weet wel dat je in een window een onload-commando in de <body> kunt zetten, maar ik zou het graag vanuit het openende window doen...
Mozilla geeft duidelijkere foutmeldingen dan MSIE

Tools -> Web Development -> JavaScript Console

Aan de inhoud van de bovenstaande tekst kunnen geen rechten worden ontleend, tenzij dit expliciet in dit bericht is verwoord.

Pagina: 1