PDA

View Full Version : Denna kod öppnar ett fönster för mycket?


Daniel78
2001-07-05, 10:09
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>

Jojoxx
2001-07-06, 06:44
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

Erik Juhlin
2001-07-06, 06:49
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 (http://www.juhlin.nu/) /sk8files/ (http://www.juhlin.nu/sk8files/) /mp2d/ (http://www.juhlin.nu/mp2d/)

Jojoxx
2001-07-06, 11:44
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,heig ht=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

Daniel78
2001-07-09, 12:09
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

Jojoxx
2001-07-09, 16:08
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