Fenster verlassen bei Nicht-Beendigung der for-Schleife
Romero
- javascript
hallöchen auch,
hab da ein technisches problem.
ich habe mittels javascript ein fenster öffnen lassen, wo ich dann mittels einer for-schleife daten in dieses fenster "reinschreibe".
es dauert dann also ne weile bis alle daten (ein array mit ca. 100 elementen) in dieses neugeöffnete fenster auftauchen.
wenn ich aber vorher das fenster schließen möchte, bevor diese daten komplett geschrieben worden sind bzw. die for-schleife beendet ist, kommt da folgende fehlermeldung: Erlaubnis verweigert.
wie kann ich diese fehlermeldung umgehen?oder das schließen des fensters soweit unterbinden das erst nach dem laden/schreiben des gesamten array's das fenster geschlossen werden kann/darf.
hier die funktion womit ich das fenster erstelle. dabei ist die variable out das besagte array.
var Drucken_ohne_BTH = function()
{
var fenster = window.open( "", "Druckfenster", "width=720,height=800,left=500,top=100,scrollbars=1" );
fenster.focus();
var date = new Date();
var Tag = date.getDate();
var Monat = date.getMonth();
var Jahr = date.getFullYear();
var Datum = Tag + "." + Monat + "." + Jahr;
fenster.document.open();
fenster.document.write( "<html><head><title>Druckfenster</title>" );
fenster.document.write( "<style type='text/css'>" );
fenster.document.write( "body { margin:5px }" );
fenster.document.write( "table.print { width:700px; height:735px; border:2px; border-style: outset; margin:0px; border-spacing:0; border-collapse:collapse }" );
//fenster.document.write( "td { border:1px; border-style: inset }" );
fenster.document.write( ".print1 { vertical-align:top }" );
fenster.document.write( ".print2 { vertical-align:top; padding-left: 40px }" );
fenster.document.write( ".print3 { vertical-align:top }" );
fenster.document.write( "</style>" );
fenster.document.write( "</head><body>" );
fenster.document.write( "<table class='print'><tr height=25><td colspan=3 align='right'>" + Datum + "</td></tr>" );
fenster.document.write( "<tr height=50><td width='30%' align='left' style='font-size:14pt'><b>Schnittteilliste</b></td><td width='40%' style='padding-left: 40px' style='font-size:14pt'><b>" + locations.outfile1 + "</b></td><td width='30%' align='center'><input type='button' value='Drucken'></input></td></tr>" );
fenster.document.write( "<tr><td align='left' id='print1' class='print1'></td><td id='print2' class='print2'></td><td id='print3' class='print3'></td></tr>" );
fenster.document.write( "</table>" );
fenster.document.write( "<div><i><center>Diese Darstellung spiegelt nicht die Ausgabe auf dem Papier wieder. Es dient lediglich nur zur Kontrolle.<br>Wenn Sie die Stückliste als Schnittteilliste ausdrucken wollen, betätigen Sie oben rechts den Button.</center></i></div>" );
//----------------------------------------
//-- Stückliste ins neue Fenster schreiben
//----------------------------------------
if( out.length <= 102 )
{
if( out.length <= 34 )
{
var teil1 = out.length;
} else { var teil1 = 34; };
if( out.length <= 68 )
{
var teil2 = out.length;
} else { var teil2 = 68; };
} else if( out.length > 102 )
{
var teil1 = Math.ceil( out.length / 3 );
var teil2 = teil1 * 2;
};
for( var i = 0; i < teil1; i++ )
{
fenster.document.getElementById( "print1" ).innerHTML += out[i] + "<br>";
};
for( var i = teil1; i < teil2; i++ )
{
fenster.document.getElementById( "print2" ).innerHTML += out[i] + "<br>";
};
for( var i = teil2; i < out.length; i++ )
{
fenster.document.getElementById( "print3" ).innerHTML += out[i] + "<br>";
};
fenster.document.write( "</body></html>" );
fenster.document.close();
};
lg romero
es dauert dann also ne weile bis alle daten (ein array mit ca. 100 elementen) in dieses neugeöffnete fenster auftauchen.
Hilft es wenn du zuerst den kompletten String zusammenbaust, dann das Fenster erzeugst und da alles auf einmal rein schreibst?
Hilft es wenn du zuerst den kompletten String zusammenbaust, dann das Fenster erzeugst und da alles auf einmal rein schreibst?
sicherlich! Vor allem, wenn du das document.getElementById dabei weglässt und auch diese Daten einfach per + in den String hängst. Das dauernde Suchen der ewig gleichen Elemente im gerade erst selbst erstellten Dokument kostet unnötig Zeit
Hilft es wenn du zuerst den kompletten String zusammenbaust, dann das Fenster erzeugst und da alles auf einmal rein schreibst?
sicherlich! Vor allem, wenn du das document.getElementById dabei weglässt und auch diese Daten einfach per + in den String hängst. Das dauernde Suchen der ewig gleichen Elemente im gerade erst selbst erstellten Dokument kostet unnötig Zeit
boah jetzt bin ich doch ein wenig überfragt.wie zuerst alles schreiben dann das fenster erzeugen,dann alles komplett reinschreiben?
heißt das in dem script von mir erst die var fenster erzeugen wenn der rest erstellt ist?also von fenster.document.write(...) auf document.write(...) ändern?oder wie meint ihr das jetzt genau?sorry steh grad bissl aufn schlauch...
Om nah hoo pez nyeetz, Romero!
Ich geb' mal ne kurze Zusammenfassung, damit es deinem Schlauch nicht so weh tut:
UNGETESTET
var Drucken_ohne_BTH = function()
{
...
var Datum = Tag + "." + Monat + "." + Jahr;
var Inhalt = "";
Inhalt = "<html><head><title>Druckfenster</title> ...
...
<tr><td align='left' id='print1' class='print1'>"
/* jetzt kommt deine Schleife zur Ermittlung was alles in print1 rein soll */
for( var i = 0; i < teil1; i++ )
{
Inhalt += out[i] + "<br>";
};
/* dasselbe für print2 und 3. Wenn du die IDs nur dafür brauchst, können Sie auch weg. */
/* irgendwann hast du deine komplette HTML-Wurst zusammen */
fenster.document.open();
fenster.document.write( Inhalt );
fenster.document.close();
};
Matthias
Einer dieser Sätze brachte mich dann doch leicht zum schmunzeln ;-)