Zugriff auf opener nach Seitewechsel?
abtauchen
- javascript
Hallo Forum!
Ich habe eine Seite mit Frames. Aus einem dieser Frames (nennen wir ihn A) öffnet sich ein Popup (B). Nun möchte ich vom Popup aus auf meinen Frame A, bzw. das übergeordnete Frameset zufreifen (per top.opener.top.frames['framename'].location.href). Soweit kein Problem, das klappt bei mir auch.
Wenn nun eine neue Seite in Frame A geladen wird, klappt das Ganze nun nicht mehr. Finde ich eigentlich auch nicht unlogisch, weil ja der opener nun auch nicht mehr da ist.
Kann ich trotzdem irgendwie auf A oder das übergeordnete Frameset zugreifen?
Vielen Dank schon mal für's Nachdenken
Ciao
Sup!
Na, das wäre ja dann möglicherweise eine Cross-Site-Scripting-Attacke, das darf eigentlich gar nicht gehen.
Gruesse,
Bio
Guten morgen,
Danke für Deine Antwort, Bio!
Na, das wäre ja dann möglicherweise eine Cross-Site-Scripting-Attacke, das darf eigentlich gar nicht gehen.
Hoppsa... an sowas böses habe ich natürlich gar nicht gedacht. Klingt aber (leider) einleuchtend...
Wenn trotzdem noch jemandem was einfallen sollte, wäre ich natürlich sehr dankbar.
Ciao
Wenn nun eine neue Seite in Frame A geladen wird, klappt das Ganze nun nicht mehr. Finde ich eigentlich auch nicht unlogisch, weil ja der opener nun auch nicht mehr da ist.
Das stimmt nicht. opebner ändert sich ja nicht dadurch, das du eine neue Seite darin lädst. opener ist das window das den popup aufgemacht hat.
Kann ich trotzdem irgendwie auf A oder das übergeordnete Frameset zugreifen?
ja, per opener.
Struppi.
Hallo Struppi!
Danke für Deine Antwort!
Das stimmt nicht. opebner ändert sich ja nicht dadurch, das du eine neue Seite darin lädst. opener ist das window das den popup aufgemacht hat.
Hmm. Das dachte ich auch bis vorhin... Hast Du ne Erklärung dafür, dass es trotzdem nicht geht?
ja, per opener.
Leider sagt mir aber die JavaScript-Konsole "top.opener has no properties". Wenn die öffnende Seite noch im Frame geladen ist, erscheint kein JS-Fehler.
Vorschläge? Ideen?
Danke und Ciao
gruss abtauchen, hallo Struppi,
struppi hat recht - nicht das "document" ist der opener,
sondern das "window"-objekt in welchem "document" liegt-
dem eher unwahrscheinlichen fall, das einem remote-window
die referenz auf seinen opener "verloren gehen" sollte,
kann man noch zusaetzlich vorbeugen, indem man den "opener"
explizit in dieser form setzt:
var remoteWin = window.open("","...","...");
remoteWin.opener = this;
so laeuft z.b. dieser code anstandslos in NN 4.x, mozilla 1.1, msie 6.0, opera 6 und opera 7:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>opener</title>
<meta http-equiv="content-script-type" content="text/javascript" />
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1" />
<script type="text/javascript">
<!--
function openRemote() {
var remoteContent = ''+
'<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">\n'+
'<html>\n'+
'\n'+
'<head>\n'+
' <title>remote</title>\n'+
' <meta http-equiv="content-sc' + 'ript-ty' + 'pe" content="text/ja' + 'vasc' + 'ript" />\n'+
' <meta http-equiv="content-ty' + 'pe" content="text/ht' + 'ml; charset=ISO-8859-1" />\n'+
' <sc' + 'ript ty' + 'pe="text/ja' + 'vasc' + 'ript">\n'+
' <' + '!-' + '-\n'+
' function changeOpenerContent() {\n'+
' var openerContentNew = ''+\n'+
' '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">\n'+\n'+
' '<html>\n'+\n'+
' '\n'+\n'+
' '<head>\n'+\n'+
' ' <title>still opener - changed content</title>\n'+\n'+
' ' <meta http-equiv="content-ty' + 'pe" content="text/ht' + 'ml; charset=ISO-8859-1" />\n'+\n'+
' '</head>\n'+\n'+
' '\n'+\n'+
' '<body>\n'+\n'+
' ' <p>content of "remoteWin"s opener got changed<br /><br />der inhalt des openers von "remoteWin" wurde geändert</p>\n'+\n'+
' '</body>\n'+\n'+
' '</html>\n'\n'+
' opener.document.open("text/html");\n'+
' opener.document.write(openerContentNew);\n'+
' opener.document.close();\n'+
' alert("content of opener has changed\nder inhalt des openers hat sich geaendert");\n'+
' alert("prove if \"remoteWin\" still can reference its opener -\npruefen, ob \"remoteWin\" noch auf seinen opener referenzieren kann -\n\nopener.name = "+opener.name+"\nopener.document.title = "+opener.document.title);\n'+
' }\n'+
' /' + '/--' + '>\n'+
' </sc' + 'ript>\n'+
'</head>\n'+
'\n'+
'<body onload="if(opener){alert('opener.name = '+opener.name);changeOpenerContent();}">\n'+
' <p>html content of "remoteWin" itself<br /><br />html inhalt von "remoteWin"</p>\n'+
'</body>\n'+
'</html>\n';
var remoteWin = window.open("","remoteWindow","width=350,height=100,resizable=yes,scrollbars=yes");
this.name = "openerWin";
remoteWin.opener = this;
remoteWin.moveTo(350,250);
remoteWin.document.open("text/html");
remoteWin.document.write(remoteContent);
remoteWin.document.close();
}
//-->
</script>
</head>
<body onload="openRemote()">
<p>html content of "remoteWin"s opener<br /><br />html-inhalt der opener-seite von "remoteWin"</p>
</body>
</html>
viel erfolg und by(t)e by(t)e - peterS. - pseliger@gmx.net
--
sh:| fo:) ch:? rl:| br:& n3:} n4:# ie:| mo:{ va:| de:[ zu:] fl:) ss:) ls:& js:)
Hallo Peter!
Vielen Dank für Deinen Beitrag! Das klingt ja vielversprechend :-)
Da mir gerade die Augen zufallen, werde ich das morgen mal testen (und gegebenenfalls nachfragen ;-))
Ciao und gute Nacht
Hi,
Afaik muss der opener erst wieder bekannt gemacht werden, ich hatte da noch so einen Test rumliegen:
var trycnt = 0; // Anzahl Versuche falls datei noch nicht geladen
function meetOpener()
{
// remctl ist der popup-handler
if (opener && !opener.closed && opener.remctl) opener.remctl = self;
else if (++trycnt < 50) setTimeout('meetOpener()', 500);
}
hth + Gruesse Joachim
Hallo Forum!
Danke für die Hilfe. Hat zwar nur indirekt genützt, aber ich konnte mein Problem trotzdem lösen :-)
Ich habe jetzt das Handle in top gespeichert. Damit ist es auch nach dem Reload des Framesets noch ansprechbar.
Ciao
hi, abtauchen, ;-)
... AAAAAANTRETEN ZUM ANSCHIIIIIIISSS ...
gestern, am 07. Juli 2003, 23:16 schriebst Du:
Hallo Forum!
Ich habe eine Seite mit Frames. Aus einem dieser Frames (nennen
wir ihn A) öffnet sich ein Popup (B). Nun möchte ich vom Popup
aus auf meinen Frame A, bzw. das übergeordnete Frameset zufreifen
(per top.opener.top.frames['framename'].location.href). Soweit
kein Problem, das klappt bei mir auch.
Wenn nun eine neue Seite in Frame A geladen wird, klappt das
-------------------^^^^^
Ganze nun nicht mehr. Finde ich eigentlich auch nicht unlogisch,
----------------------^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
weil ja der opener nun auch nicht mehr da ist.
das fanden wir eben nicht;
Kann ich trotzdem irgendwie auf A oder das übergeordnete Frameset
zugreifen?Vielen Dank schon mal für's Nachdenken
Ciao
heute vernimmt man:
Hallo Forum!
Danke für die Hilfe. Hat zwar nur indirekt genützt, aber ich
konnte mein Problem trotzdem lösen :-)
Ich habe jetzt das Handle in top gespeichert. Damit ist es auch
nach dem Reload des Framesets noch ansprechbar.
---------^^^^^^-----^^^^^^^^^ na toll, die wichtigste
information teilst Du uns so lapidar am rande mit: erst
war es nur eine seite - jetzt ist es also ein frameset -
mit diesem wissen haetten wir doch ganz anders auf Deine
fragestellung reagieren koennen - beim naechsten mal bitte
von anfang an praeziser - danke - peterS. - pseliger@gmx.net
... ach ja - stehen sie bequem ... abtreten
--
sh:| fo:) ch:? rl:| br:& n3:} n4:# ie:| mo:{ va:| de:[ zu:] fl:) ss:) ls:& js:)
Hallo Forum, Hallo peterS,
... AAAAAANTRETEN ZUM ANSCHIIIIIIISSS ...
Ähem, OK. Anschiss akzeptiert.
Die Problematik hat sich eben im Laufe des Tages geändert. Eigentlich sollte das Frameset ja auch nicht neu geladen werden, nun ist es aber aus anderen Gründen so.
Ich werde mich beim nächsten Mal um Präzision un Information im Falle einer Situationsveränderung bemühen. ;-)
Nochmal Danke für die Bemühungen!
Ciao