Gegevens ophalen uit ander frame of window

Status
Niet open voor verdere reacties.

NielsDesmet

Gebruiker
Lid geworden
19 mei 2008
Berichten
301
Ik wil de waarde van een variabele van een javascriptje in een andere window of frame, toekennen aan een variabele in mijn javascript in het huidige window of frame.
Is dat mogelijk en hoe doe ik dat?
 
Dat kan, als je een referentie hebt naar het andere scherm / frame. Bij frames kan dit geloof ik altijd (met frame.parentElement/Node of zoiets, weet het niet zeker).

Als het echt om twee verschillende pagina's gaat kan het voor zover ik weet alleen als de ene pagina de andere opent als een popup. Dan krijg je namelijk een referentie naar het nieuwe window object terug.
 
Laatst bewerkt:
met popups is het iig makkelijk:

popup:
Code:
window.dostuff = function()
{
  alert(window.variable);
  window.opener.variable2 = "Dag wereld.";
}

Hoofdscherm:
Code:
var newWindow = window.open(blablabla);
newWindow.variable = "Hallo wereld";
newWindow.opener = window;
newWindow.dostuff();   // Ik vraag me af of dit werkt of dat misschien de functie nog niet gedefinieerd is. Het is veiliger om een knopje of iets dergelijks neer zetten in de popup
alert(window.variable2);


Je kunt bijvoorbeeld ook op het onclose event van de popup iets doen met window.opener

Voor frames zou ik even moeten kijken, misschien hebben ze zelfs dezelfde scope, maar ik moet nu echt even gaan eten :P
 
Laatst bewerkt:
Hmm... Het werkt niet helemaal. Ik krijg in HTML-Kit de volgende fout in het Hoofdscherm: Niet nader omschreven fout, in regel 11 teken 1.
Regel 11 is de volgende:
Code:
newWindow.variable = "Hallo wereld";

EDIT: En het werkt ook niet als ik 'var variable = "";' schrijf in het popup scherm.
 
Laatst bewerkt:
heb je wel window.open(blablabla); vervangen door een echte pagina? :p Bij mij werkt het namelijk.

Zelfs newWindow.dostuff() werkt, ookal zou dat af kunnen hangen van laad tijden e.d.
 
Laatst bewerkt:
Ja, ik heb de "blablabla" vervangen door "C:\\Users\\Niels\\Documents\\LOL.htm","titel"
newWindow.variable = "Hallo wereld"; en newWindow.dostuff(); blijken allebei "niet nader omschreven fouten" te veroorzaken en ik zou totaal niet weten wat er verkeerd aan is.
Ik heb het al getest in oude IE, nieuwe IE en FF. Het werkt in geen van de drie.

EDIT: What theee...? Daarjuist gaf hij een error-message "Het venster heeft geen schuifbalken", en als ik het daarna nog eens testte, werkte het plots perfect. Ik heb er echt niks aan veranderd... Dat vind ik echt wel heel raar o.O

EDIT2: HTML-Kit heropgestart, en het is weer net zoals daarjuist, dus het werkt weer niet meer. Dit heb ik echt nog nooit meegemaakt! Hoe komt dit?!
 
Laatst bewerkt:
In IE krijg ik beveilingsfouten omdat het Javascript niet laat draaien op lokale bestanden (???) maar in Firefox ging het in één keer goed.

Maar lukt het nog om foutmeldingen te veroorzaken?


(Ik weet dat ik de beveiling van IE aan kan passen maar ik gebruikt eht toch nooit, dus ik laat het maar zitten)
 
Ja, daarjuist ben ik er nog eens in geslaagd om het te doen werken op de "geen-schuifbalken-manier", en daarna was het weer gedaan. Hij lijkt het wel te kiezen... =P

Niet dat het er iets mee te maken heeft, maar het valt mij op dat ik het op die manier 1 keer kan doen werken, als ik willekeurig iets in het hoofdwindow-bestand verander (dus echt gewoon op een willekeurige plek "gvedhthgtrhze" of zoiets typen), opsla, weer herstellen, nog eens opslaan, en dan testen.
 
Laatst bewerkt:
misschien dat het toeval is, dat het window object nog niet klaar is tegen de tijd dat je het probeert te veranderen? Lijkt me eigenlijk sterk, maar als je alles na newWindow = window.open(blabla); in een timeout zet van een halve seconde kun je het uitsluiten.


Code:
var newWindow = window.open("hola.html", "_blank");
window.setTimeout(doespul, 500);
function doespul()
{
  newWindow.variable = "Hallo wereld";
  alert(newWindow.variable);
  newWindow.opener = window;
  newWindow.dostuff();   // Ik vraag me af of dit werkt of dat misschien de functie nog niet gedefinieerd is. Het is veiliger om een knopje of iets dergelijks neer zetten in de popup
  alert(window.variable2);
}
 
Laatst bewerkt:
... Werkt evenmin. Volgens ligt het eraan dat je popup gegevens kan opvragen uit je hoofdvenster of vice versa, maar niet allebei tegelijk. Want dan krijg je iets soortgelijks alsof je dit zou progammeren in C++:

Code:
void Functie1()
{
 Functie2();
}
void Functie2()
{
 Functie1();
}
void main()
{
 Functie1();
}
... Dit kan eigenlijk onmogelijk werken omdat je in functie 1 al refereert naar een functie die nog niet bestaat. Dit is ook het geval bij dit probleem.
Misschien werkt het dus wel als je die variable2 en gerelateerde commands gewoon laat vallen...

Wat ik wel kras vind, is dat het wél werkt bij jou |=(

EDIT: Ik zit er hier nog wat op te experimenteren, en het begint al min of meer te lukken. Alleen wilt hij nog niet "Hallo Wereld" zeggen. Hier is de gemodificeerde code:
Code:
Hoofdvenster:

var newWindow = window.open("C:\\Users\\Niels\\Documents\\LOL.htm","gerg","");
newWindow.variable = "Hallo wereld";
newWindow.opener = window;
newWindow.dostuff();   // Ik vraag me af of dit werkt of dat misschien de functie nog niet gedefinieerd is. Het is veiliger om een knopje of iets dergelijks neer zetten in de popup
setTimeout("alert(window.variable2)",1000);
Code:
Popup:

window.dostuff = function()
{
  alert(window.variable);
  window.opener.variable2 = "Dag wereld.";
}
 
Laatst bewerkt:
Ah hebbes, toen ik de eerste alert eruit haalde (degene voor newWindow.doStuff) toen deed ie het bij mij ook niet meer. Het ligt er dus inderdaad aan dat de functie nog niet toegankelijk is. Het window object wel, maar de javascript in het document is nog niet verwerkt (vraag me of of het document uberhaupt toegankelijk is?).

Het zal ook wel niet nodig zijn om een functie aan te roepen in een net geopende popup, aangezien je dan net zo goed het onload event in de popup zou kunnen gebruiken. Maargoed, het kan wel met een timeout. Dit moet werken:
Code:
var newWindow = window.open("hola.html","_blank");
newWindow.variable = "Hallo wereld";
newWindow.opener = window;
setTimeout(doespul, 500);
function doespul()
{
  newWindow.dostuff();
  alert(window.variable2);
}
 
Laatst bewerkt:
Argh! Ik wil niet vervelend doen, maar HK blijft maar beweren dat er iets fout is aan newWindow.variable = "Hallo wereld"; en newWindow.dostuff();, zelfs met die nieuwe code...
Och ja, ik zal er mij misschien een andere keer nog wel eens mee bezig houden...
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan