Ik probeer met een popup te communiceren nadat ik deze geopend heb. Met communiceren bedoel ik informatie die ik in de context van een venster heb, in de context van de popup te krijgen (maar één richting dus). Daarna wil ik het oude venster sluiten. Dit deed ik aanvankelijk op de volgende manier:
Door bij de popup onLoad window.data te bekijken, dacht ik dan de data te hebben. Dat lukte ook wel, in Firefox. Internet Explorer kwam echter met een vreemde foutmelding: "De server (niet de servertoepassing) is niet beschikbaar en is verdwenen. Alle verbindingen zijn ongeldig. De aanroep is niet uitgevoerd." (Engels: "The callee (server [not server application]) is not available and disappeared; all connections are invalid. The call did not execute.")
Na uren Googlen en onderzoeken ben ik nog niet erg veel verder gekomen. Ik snap de oorzaak ongeveer, maar weet niet hoe ik het op kan lossen. Met deze testpagina kun je het probleem reproduceren:
In Internet Explorer werkt deze code erg willekeurig. Soms bestaat op regel 7 de variabele window.testnode wel, maar vaak niet. Na regel 8 bestaat deze variabele nooit meer. window.nonobject blijft wel bestaan.
Het lijkt dus te maken te hebben met objecten, die worden namelijk niet gekopieerd bij assignments, maar gederefereerd. Zoals je kunt zien heb ik dit al geprobeerd op te lossen met de cloneNodes()-calls. Eén keer in de context van de opener (regel 15), en één keer in de context van de popup (regel 7). Ik heb ook gezorgd dat de opener pas na het klonen gesloten wordt.
Ik kom dus nog steeds niet van het probleem af. Zijn er betere manieren om dit te doen?
JavaScript:
1
2
3
| newwin = window.open(url); newwin.data = node; window.close(); |
Door bij de popup onLoad window.data te bekijken, dacht ik dan de data te hebben. Dat lukte ook wel, in Firefox. Internet Explorer kwam echter met een vreemde foutmelding: "De server (niet de servertoepassing) is niet beschikbaar en is verdwenen. Alle verbindingen zijn ongeldig. De aanroep is niet uitgevoerd." (Engels: "The callee (server [not server application]) is not available and disappeared; all connections are invalid. The call did not execute.")
Na uren Googlen en onderzoeken ben ik nog niet erg veel verder gekomen. Ik snap de oorzaak ongeveer, maar weet niet hoe ik het op kan lossen. Met deze testpagina kun je het probleem reproduceren:
HTML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
| <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Strict//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head> <title>Popuptest</title> <script type="text/javascript"> function getData() { var node = window.testnode.cloneNode(true); window.opener.close(); debugger; } function putData() { var node = parsexml('<a></a>'); var newwin = window.open(location.href); newwin.testnode = node.cloneNode(true); newwin.opener = window; newwin.nonobject = 5; } function parsexml (xml) { var doc = null; if (typeof ActiveXObject != 'undefined') { doc = new ActiveXObject('Microsoft.XMLDOM'); doc.async = false; doc.loadXML(xml); } else { var parser = new DOMParser(); doc = parser.parseFromString(xml, 'text/xml'); } return doc.documentElement; } </script> </head> <body onload="getData();"> <button onClick="putData();">Test!</button> </body> </html> |
In Internet Explorer werkt deze code erg willekeurig. Soms bestaat op regel 7 de variabele window.testnode wel, maar vaak niet. Na regel 8 bestaat deze variabele nooit meer. window.nonobject blijft wel bestaan.
Het lijkt dus te maken te hebben met objecten, die worden namelijk niet gekopieerd bij assignments, maar gederefereerd. Zoals je kunt zien heb ik dit al geprobeerd op te lossen met de cloneNodes()-calls. Eén keer in de context van de opener (regel 15), en één keer in de context van de popup (regel 7). Ik heb ook gezorgd dat de opener pas na het klonen gesloten wordt.
Ik kom dus nog steeds niet van het probleem af. Zijn er betere manieren om dit te doen?