Seite 1 von 1

[js] Neues Fenster onload + reload Problem

Verfasst: 04.05.2012, 21:30
von Roughael
folgende situation:
Ich erzeuge ein neues fenster, dem ich einen onload verpasse mittels addEventListener.
in diesem onload prüfe ich, ob die seite korrekt geladen wurde (gelegentlich gibt es dank massig vieler anfragen eine fehlermeldung) und wenn nicht, findet ein reload statt. soweit funktioniert das.

wenn der reload allerdings stattgefunden hat greift das onload nicht mehr, auch wenn ich ihn manuell neu hinzufüge wird er beim reload nicht erneut aufgerufen.

jemand ne idee wie man das fixen kann ?
der gesammte js code ist auf der startseite, also nicht im neuen fenster.

Verfasst: 17.05.2012, 01:00
von Pummeluft
Könntest du den relevanten Code posten?

Verfasst: 17.05.2012, 08:25
von Roughael

Code: Alles auswählen

var w = window.open("http://blaaa/");
w.addEventListener('load', function() {
    //..
    if(!isPageValid(w))
        w.location.reload();
}, true);

Verfasst: 17.05.2012, 10:41
von Nomschta
ich kenn mich mit js nicht aus, aber gibt es vielleicht noch andere events die passender wären? also zB auf load und auf refresh "hören"

Verfasst: 17.05.2012, 13:00
von Pummeluft
Das Problem ist also, die Seite wird neu geladen, aber auf die neu geladene Seite könnte wieder nicht korrekt geladen worden sein und in dem Fall funktioniert der Event-Listener nicht mehr?

W ist in dem neuen Fesnter nicht mehr bekannt. Durch this oder window ersetzt, funktioniert es (Lustigerweise stört es ihn beim w.close(); in keinster Weise :ugly: ):

Seite1.html:
<html>
<head>
<title>Seite1</title>
<script type="text/javascript">
function main()
{
var w = window.open("seite2.html");
w.addEventListener('load', function()
{
window.setTimeout(function()
{
w.close();
this.location.reload();
}, 500);

}, true);
}
</script>
</head>
<body onload="main()">
</body>
</html>

Seite2.html:
<html>
<head>
<title>Seite2</title>
<script type="text/javascript">
function main()
{
var bgcolorlist = new Array("red", "blue", "green", "yellow");
document.body.style.background = bgcolorlist[Math.floor(Math.random()*bgcolorlist.length)];
}
</script>
</head>
<body onload="main()">
</body>
</html>

Verfasst: 17.05.2012, 16:00
von Roughael
aber window ist in dem fall doch das aufrufende fenster oder nicht ?

Verfasst: 17.05.2012, 21:36
von Roughael
gerade ausprobiert, funktioniert nicht.
this ist hier nicht das geöffnete fenster, sondern das aufrufende fenster.
hau das in die firebug konsole rein(falls du sie hast):

Code: Alles auswählen

var w = window.open("http://quake.ingame.de/forum/");
w.addEventListener('load', function() {
    window.setTimeout(function() {
        alert('reloaded');
        this.location.reload();
    }, 500);
}, true);
eventuell liegt es daran dass ich zum aufrufenden fenster zurück wechsel? das lässt sich jedoch nicht vermeiden, bzw. geschieht regelmäßig.

Verfasst: 17.05.2012, 23:51
von Pummeluft
Huch, hast recht. Das machte keinen Sinn. Hatte gar nicht geschaut, was mit Seite1 passiert :F
So geht es: Seite1

Code: Alles auswählen

<html>
	<head>
		<title>Seite1</title>
		<script type="text/javascript">
		alert("Ich werde nur einmal aufgerufen!");
		function main()
		{
			var w = window.open("seite2.html");
			w.addEventListener('load', function()
			{
				window.setTimeout(function()
				{
					w.close();
					main();
			
				}, 1000);

			}, true);
		}
		</script>
	</head>
	<body onload="main()">
	</body>
</html>

<html>
	<head>
		<title>Seite2</title>
		<script type="text/javascript">
		function bla()
		{
			var bgcolorlist = new Array("red", "blue", "green", "yellow");
			document.body.style.background = bgcolorlist[Math.floor(Math.random()*bgcolorlist.length)];
		}
		</script>
	</head>
	<body onload="bla()">
	</body>
</html>




Verfasst: 18.05.2012, 03:33
von Roughael
ja, funktionieren tut es, ist aber nicht das wonach ich gefragt habe..
du erzeugst ein neues fenster. beim neu erzeugen wird automatisch zum neuen fenster gewechselt.
bei einer problemschleife hat man also wie bei deinem beispiel schwierigkeiten zum originalfenster zurück zu kommen ohne dieses zu schliessen.
bei meinem anwendungszweck sollte seite2 im hintergrund neu geladen werden bis es endlich geht und dann auf seite1 eine nachricht erscheinen.

meine vorerst lösung dazu sieht so aus, dass ich auf seite2 im onload eine methode des parent fensters aufrufe.
auch nicht ganz schön, aber funktioniert mit reload anstelle von neuem fenster.

bevor ichs vergesse: danke fürs mitdenken, mir scheint jedoch für das eigentliche problem gibt es keine lösung.

Verfasst: 20.05.2012, 17:16
von Mein Name sei Wapaz
Wozu brauchst du überhaupt Popup-Fenster? Sowas ist ziemlich miese usability.

Verfasst: 20.05.2012, 17:38
von Roughael
1. is kein echtes popup fenster sondern ein normales fenster, welches heutzutage eh im neuen tab geöffnet wird.
2. geht um nen greasemonkey script, welches nur ich nutze, also ist die nutzbarkeit lediglich aus meiner perspektive interessant. und für mich isses so am brauchbarsten.