webForumDet fria alternativet

Denna kod öppnar ett fönster för mycket?

JavaScript

5 svar · 210 visningar · startad av Daniel78

Medlem sedan jan. 2001200 inlägg
Frågan#1

Hej, använder denna kod när jag ska skriva ut en rapport ifrån SQL Server o lite annat. Allting fungerar perfekt förutom att det öppnas ett "onödigt" nytt fönster med samma innehåll som redirecten gör! Varför?

		<script>javascript:window.print();
		self.location.href='mselect.asp';</script>
Medlem sedan juni 20004 308 inlägg
#2

Det finns egentligen bara ett syntax-fel i koden, och det är javascript:. Detta använder du bara i länkar för att tala om att protokollet inte skall vara http/ftp, e.dyl. utan att det är ett javascript-uttryck. Innanför ett script-block skall det aldrig vara med. Det är mycket möjligt att det kan ge ett sådant fel i vissa webbläsare.

Sedan skulle det inte skada med lite fler attribut i <script>-taggen för att tala om vad det är för språk.

<script language="JavaScript" type="text/javascript">
window.print();
location.href="mselect.asp";
</script>

------------------
/ J

Medlem sedan maj 200010 687 inlägg
#3

Jag passar på att fråga dig Jojoxx som alltid är mån om läsare som inte stöder JavaScript varför du aldrig har med kommentar taggar?

Så här skulle jag ju skriva.. :)

<script language="JavaScript" type="text/javascript">
<!--
window.print();
location.href="mselect.asp";
//-->
</script>

------------------
/Erik
www.juhlin.nu /sk8files/ /mp2d/

Medlem sedan juni 20004 308 inlägg
#4

För det första så är det ett minimalt antal webbläsare som visar script-koden när de inte har stöd för JavaScript (någon tidig Netscape version). Lynx exempelvis har som bekant inte stöd för JavaScript, men visar för den skull inte script-koden.

Sedan är det väl oftast så att skulle användaren sitta med en sådan webbläsare så är faktumet att den visar script-koden det minsta problemet; ingenting fungerar då :) Annat vore det ju om sidan skulle fungera utan JavaScripten, och det bara användes för att förfina funktionaliteten.

<a href="sida.html" target="_blank" onClick="window.open('sida.html','myWin','top=5,left=5,width=400,height=400); return false;">länk</a>

Här använder vi alltså JavaScript om det finns aktiverat för att öppna ett anpassat fönster. Finns det inte så öppnas det ändå, via html, i ett nytt fönster fast det inte är anpassat.

Men visst, det är inget fel i att sätta dit kommentarstaggarna. Fast det är ju ett kodmässigt skönhetsfel att blanda in html-element (kommentarstaggarna) i script-blocket :).

------------------
/ J

Medlem sedan jan. 2001200 inlägg
#5

Nix, tyvärr fungerade det inte. Om jag får spekulera i något så verkar det som om "location.href" vill byta sidan lite för snabbt, alltså innan "window.print" funktionen är klar och detta resulterar i konstigt uppförande.

Jag har även en del "request.form" med i min asp kod och det verkar som om den information inte heller får tid att skrivas in i "html" koden.

Kan man inte göra något form av "onload.finish" så ska skriv funktionen aktiveras, likadant när skriv ut funktionen är klar så ska "location.href" aktiveras"?

MVH
Daniel

Medlem sedan juni 20004 308 inlägg
#6

Nix, tyvärr fungerade det inte. Om jag får spekulera i något så verkar det som om "location.href" vill byta sidan lite för snabbt, alltså innan "window.print" funktionen är klar och detta resulterar i konstigt uppförande.

Ja, det är troligt. Här är ett alternativ;

window.print();
setTimeout('changeUrl("mselect.asp");',1000);
function changeUrl(URL){
	alert("Klicka 'OK' efter att du skrivit ut sidan");
	location.href=URL;
}

Jag har även en del "request.form" med i min asp kod och det verkar som om den information inte heller får tid att skrivas in i "html" koden.

ASP-koden bearbetas på servern innan sidan skickas till användaren, så det är inget du behöver tänka på vid klientsidan. (Mao, på klientsidan ser du inget av asp-koden, utan ser bara en genererad html-sida).

Kan man inte göra något form av "onload.finish" så ska skriv funktionen aktiveras, likadant när skriv ut funktionen är klar så ska "location.href" aktiveras"?

Jo, visst. Det är så onload-eventer fungerar. Det triggas alltså inte förrens hela sidan är laddad.

<body onLoad="printit();">
<script language="JavaScript" type="text/javascript">
function printit(){
	window.print();
	setTimeout('changeUrl("mselect.asp");',1000);
}
function changeUrl(URL){
	alert("Klicka 'OK' efter att du skrivit ut sidan");
	location.href=URL;
}
</script>

------------------
/ J

259 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
124 ms — deklarationer (db)
0 ms — hämta statistik (cache)
133 ms — hämta tråd, inlägg och bilagor (db)
122 ms — ändringar (db)