webForumDet fria alternativet

Stänga en popup

14 svar · 504 visningar · startad av paraxe

paraxeMedlem sedan apr. 2004298 inlägg
#1

Hej

Jag har ett script som kan vara tungladdat.

Så därför öppnar jag en popup som ber användaren att ha tålamod.

Popupen öppnar jag på knappen som triggar scriptet:

function alertWindow(url, windowName, myHeight, myWidth)
        {
        window.open(url,windowName,"scrollbars=1...osv...

När scriptet är klart skriver jag ut <body> taggen och kan således köra en body onLoad.

Men vad skriver jag för att stänga popupen som jag öppnade?

Mvh

Pär

Jesper TMedlem sedan nov. 20017 144 inlägg
#2

self.close()

paraxeMedlem sedan apr. 2004298 inlägg
#3

Jesper:

Då stängs ju scriptet som gör beräkningarna..

Jag vill stänga popupen som scriptet öppnade.

Mvh

Pär

Jesper TMedlem sedan nov. 20017 144 inlägg
#4

Ok, men om du öppnar ex så här:
alertWindow('sida.htm', 'myWindow', 500, 600);
så kan du kanske stänga med:
window.myWindow.close();

paraxeMedlem sedan apr. 2004298 inlägg
#5

Så här ser koden ut för att öppna popupen.

onclick=" alertWindow(sida.asp', mittNamn, 300, 100);

Kör jag window.mittNamn.close(); -> får jag att mittNamn är null eller inte ett objekt.

Mvh

Pär

Jesper TMedlem sedan nov. 20017 144 inlägg
#6
var windowName;
function alertWindow(url, myHeight, myWidth)
        {
       windowName= window.open(url, "windowName" ,"scrollbars=1 osv...")
		}
paraxeMedlem sedan apr. 2004298 inlägg
#7

Jesper har du testat denna kod?

/pär

Jesper TMedlem sedan nov. 20017 144 inlägg
#8

Ja, visst. Funkar kanoon.

paraxeMedlem sedan apr. 2004298 inlägg
#9

Hej igen.

Jag får fortfarande inte det att fungera.

Jag har kontrollerat att fönstret jag öppnar heter "windowName".

Med koden:

document.write("fönstret heter: "+window.name

Så här ser koden ut för att stänga fönstret.

<script>
window.onload = window.windowName.close()
</script>

felmess: window.windowName är Null eller inte ett objekt.

Mvh

Pär

Jesper TMedlem sedan nov. 20017 144 inlägg
#10
<script type="text/javascript">
<!--
var windowName;
function alertWindow(url, myHeight, myWidth)
        {
       windowName = window.open(url, "windowName" ,"scrollbars=1 height="+ myHeight +" width="+ myWidth +"")
	}
window.onload = windowName.close();
//-->
</script>
icaaqMedlem sedan okt. 20005 273 inlägg
#11

Jag tar över detta problem ;)
Vi har dessa två funktioner i Javascript.js

[red]
		function alertWindow(url, myHeight, myWidth)
		{
		window.open(url,"sendingMails","scrollbars=1,resizable=1,width="+ myHeight +",height="+ myWidth +",left=300,top=200");
		}
		
		function closeAlertWindow()
		{
		window.sendingMails.close()
		}
[/red]

Följande händer.
1. På en button körs detta.

[red]
<input type="button" name="action" value="Skicka nyhetsbrev" onclick=" alertWindow('alertSending.asp', 300, 100); location.href='sendNewsletter.asp?nlid=1';">
[/red]

2. i sendNewsletter.asp finns detta

[red]
<html>
<head>
<script language="javascript" src="/inc/Javascript.js" type="text/javascript"></script>
<script type="text/javascript">
<!--
window.onload = closeAlertWindow()
//-->
</script>
</head>
</html>
[/red]

Men jag får window.sendingMails är null eller inte ett objekt

Men om jag som sagt skriver ut fönsternamnet i popupen så här

[red]
<script>
document.write("fönstret heter: "+window.name)
</script>[/red]

så skriver den ut att fönstret heter : fönstret heter: sendingMails

Vad fasiken vara fel??

mv icaaq

icaaqMedlem sedan okt. 20005 273 inlägg
#12

Kan jag på något sätt felsöka detta? Jag hade nån tanke på att om man kunde loopa igenom alla fönster som fanns i JavaScript. Och då se om fönstret finns ?

mv icaaq

nitro2k01Medlem sedan aug. 20039 342 inlägg
#13

Du kan inte bara skriva window.objektnamn. Precis som ovan måste du tilldela en fönsterreferensen (= Det som window.open skickar tillbaka) till en variabel och använda detta. En korrekt kod kan t ex se ut så här:

 
	[b]tempWin = null;[/b]
	function alertWindow(url, myHeight, myWidth)
	{
	[b]tempWin = [/b]window.open(url,"sendingMails","scrollbars=1,resizable=1,width="+ myHeight +",height="+ myWidth +",left=300,top=200");
	}

	function closeAlertWindow()
	{
	[b]if (tempWin)
	if (!tempWin.closed)
	tempWin.close()[/b]
	}

	window.onload = [b]closeAlertWindow[/b];

Sen en kommentar på flerapersoners "window.onload ="-rader. Man ska inte ha med () på slutet när man skriver så.

Har man med () på slutet så körs funktionen, och window.onload sätts till det eventuella värde som returneras från funktionen.

Har man inte med () på slutet så skapas en referens till funktionen och läggs som window.onload (Vilket är det man normalt vill)

nitro2k01Medlem sedan aug. 20039 342 inlägg
#14

Woops, icaaq, ser nu ett annat problem. Du försöker komma åt fönstret från en ny sida, då är ju alla gamla javascript-variabler borta... Så då kan man göra så här istället:

 
// Första sidan
function alertWindow(url, myHeight, myWidth)
{
window.open(url,[B]"sendingMails"[/b],"scrollbars=1,resizable=1,width="+ myHeight +",height="+ myWidth +",left=300,top=200");
}
 
// sendNewsletter.asp 
window.onload = function()
{
winRef = window.open("about:blank", [B]"sendingMails"[/b]);
winRef.close();
}

På detta sätt kan du kolla genom alla fönster för att se om det finns ett fönster vid namn sendingMails. Gör det det skapas en referens till fönstret i winRef, som du sedan kan stänga.

Nackdelen med denna metod är att om fönstret inte fanns sedan innan kommer ett nytt fönster att skapas, vilket dock inte spelar någon roll här eftersom det ändå ska stängas direkt efteråt.

paraxeMedlem sedan apr. 2004298 inlägg
#15

Uppskattningen kan ej beskrivas med ord.

Men ett tack är en bit på vägen!

Så,

- Tack

Hälsningar Pär och Icaaq

128 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
125 ms — hämta tråd, inlägg och bilagor (db)