Avatar billede dk-andersson Nybegynder
07. juli 2009 - 15:15 Der er 12 kommentarer og
1 løsning

problemer med window.close(); i FF

Hey jeg kan ikke få dette script til at lukke popup window i FF og safari hvorfor?

function printContent(id){
            str=document.getElementById(id).innerHTML
            newwin=window.open('','Udskriv','left=100,top=100,width=600px,height=800px')
            newwin.document.write('<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">\n<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">\n<head>\n')
            newwin.document.write('<TITLE>Udskriv</TITLE>\n')
            newwin.document.write('<meta http-equiv="content-type" content="text/html; charset=utf-8" />\n')
            newwin.document.write('<script>\n')
            newwin.document.write('function chkstate(){\n')
            newwin.document.write('if(document.readyState=="complete"){\n')
            newwin.document.write('self.close()\n')
            newwin.document.write('}\n')
            newwin.document.write('else{\n')
            newwin.document.write('setTimeout("chkstate()",1000)\n')
            newwin.document.write('}\n')
            newwin.document.write('}\n')
            newwin.document.write('function print_win(){\n')
            newwin.document.write('window.print();\n')
            newwin.document.write('chkstate();\n')
            newwin.document.write('}\n')
            newwin.document.write('<\/script>\n')
            newwin.document.write('<link href="mainstyle_print_lightboxs.css" rel="stylesheet" type="text/css" />\n')
            newwin.document.write('<\/HEAD>\n')
            //newwin.document.write('<STYLE>body, td { font-family: Arial, Verdana, Sans-Serif; font-size: 10px; color: #7a7a7a; } .tabl { border-spacing: 4px; } .bold { font-weight: bold; }</STYLE></HEAD>\n')
            newwin.document.write('<BODY onload="print_win()">\n')
            newwin.document.write(str)
            newwin.document.write('</BODY>\n')
            newwin.document.write('</HTML>\n')
            newwin.document.close()
}
Avatar billede windcape Praktikant
07. juli 2009 - 15:38 #1
Du skulle nok overveje at læse op på hvordan DOM fungerer før du fortsætter.

document.write af HTML... nej nej nej. Det er så forkert som det kan blive.
Avatar billede repox Seniormester
07. juli 2009 - 15:39 #2
Det er en klient indstilling du ikke kan gøre noget ved.
Hvis det var vinduet, du åbnede, der ville lukke sig selv, var det ikke noget problem.

Hvis du gerne vil have det til at virke lokalt på firefox skal du ind og pille ved DOM indstillingerne på den enkelte klient.
Avatar billede dk-andersson Nybegynder
07. juli 2009 - 18:02 #3
okay.. hvordan kan jeg så gøre det her på? Ønsker at åbne et nyt vindue med hindholdt af en bestemt div´s indhold. og derefter print indholdt - og så lukke vinduet igen.
Avatar billede thesurfer Nybegynder
07. juli 2009 - 19:23 #4
repox> Hvad snakker du om? :-)

Som windcape bør man gøre det med DOM (Document Object Model), men det er skide besværligt.. :-)

Det nemmeste er at bruge innerHTML og document.write.. men disse vil man normalt ikke anbefale.. Det er ikke pænt og innerHTML er ikke med i nogen som helst standard, selv om de fleste browsere understøtter innerHTML..

Spørgsmålet er, om du kan gøre det på en anden måde..

Hvor kommer indholdet i div'en fra? Hvis det f.eks. er ASP eller PHP, vil jeg anbefale at lave en side der allerede indeholder opsætningen, og så kun loaded indholdet af den specifikke div..

Men svar lige på dette spørgsmål:

Hvor kommer indholdet i div'en fra?
Avatar billede repox Seniormester
07. juli 2009 - 19:29 #5
#4
Tror du skal have flyttet natpotten.
Jeg har ikke snakket om at der er noget galt i at han bruger DOM.
Jeg sagde bare at det klienten der forhindrer ham i at lukke det vindue han vil på den måde.
Avatar billede thesurfer Nybegynder
07. juli 2009 - 19:52 #6
Hvis man absolut ville gøre det på denne måde, kunne man gøre sådan her:

function printContent(id){
            str=document.getElementById(id).innerHTML
            newwin=window.open('','Udskriv','left=100,top=100,width=600px,height=800px')
            newwin.document.write('<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">\n<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">\n<head>\n')
            newwin.document.write('<TITLE>Udskriv</TITLE>\n')
            newwin.document.write('<meta http-equiv="content-type" content="text/html; charset=utf-8" />\n')
            newwin.document.write('<script>\n')
            newwin.document.write('function print_win(){\n')
            newwin.document.write('window.print();\n')
            newwin.document.write('window.close();\n')
            newwin.document.write('}\n')
            newwin.document.write('<\/script>\n')
            newwin.document.write('<link href="mainstyle_print_lightboxs.css" rel="stylesheet" type="text/css" />\n')
            newwin.document.write('<\/HEAD>\n')
            //newwin.document.write('<STYLE>body, td { font-family: Arial, Verdana, Sans-Serif; font-size: 10px; color: #7a7a7a; } .tabl { border-spacing: 4px; } .bold { font-weight: bold; }</STYLE></HEAD>\n')
            newwin.document.write('<BODY onload="print_win()">\n')
            newwin.document.write(str)
            newwin.document.write('</BODY>\n')
            newwin.document.write('</HTML>\n')
            newwin.document.close()
}


repox> Hvad er det lige for en DOM instilling i Firefox du henviser til?
Avatar billede dk-andersson Nybegynder
07. juli 2009 - 21:32 #7
til->thesurfer

Mit indhold kommer fra ajax funktion. Jeg arbejder i php på hele siden. hvad kan jeg load kun indhold af denne div og print.

Mit problem er enligt at jeg har mit indhold til at ligge i en lightbox. Og det indhold skal jeg så kunne print ud. Der for har jeg lavet dette script til at print indholdt af min lightbox div.

Er der en nemmer måde?
Avatar billede thesurfer Nybegynder
07. juli 2009 - 21:45 #8
Hvis man f.eks. har en div med et bestemt id, f.eks. "divNews", og kalder f.eks.:

getNews.php?newsid=5

som så smider nyheden med id "5" i databasen, kan du sikker lave en speciel fil, der tager samme id, og kun printer nyheden ud..

Eksempel med en fil der hedder printNews.php:

<doctype-indsættes-her>
<html>
<head>
<title>...</title>
<meta...>
<link eller style...>
<script...>
function print_win()
{
window.print();
window.close();
}
</script>
</head>

<body onload="print_win()">

<?

nyhed = php-kode-til-at-hente-nyhed-fra-database($_GET['newsid']);

echo nyhed

?>

</body>

</html>


Filen "printNews.php" kaldes så (fra et link eller lignende) med:

printNews.php?newsid=5

Det behøver naturligvis ikke at være "news"-relateret.. det kan også bare være artikel / post / andet..


Men det kommer naturligvis an på hvordan din side er bygget op, og relationen mellem AJAX-delen og PHP-delen.. dvs, hvad "requests" (forspørgslen) der og hvad "responses" (svares) der med..

Det er lidt nemmere at komme med en løsning, hvis vi kunne se din eksisterende kode..
Avatar billede thesurfer Nybegynder
07. juli 2009 - 21:50 #9
"som så smider nyheden" = "som så henter nyheden".

Og der er garanteret andre fejl i indlægget.. :)

Meningen er følgende:

Hvis du bruger AJAX, bruger du højst sandsynligt en database eller filer, som AJAX indlæser og opdaterer siden med.

Det er disse AJAX-kald du skal omdirigere til dit print-vindue.

Hvis du f.eks. har følgende URL, som afvikles igennem AJAX:

article.php?id=5

kan du indlæse articlePrint.php i popupvinduet med argumentet:

articlePrint.php?id=5

Det returnerer det samme som AJAX-kaldet.

Det eneste du sådan set skal holde styr på, er hvilket id du sender til hvilken div..


På den måde har du din print-funktion, af en bestemt div..
Avatar billede repox Seniormester
07. juli 2009 - 22:13 #10
#6
dom.allow_scripts_to_close_windows
Avatar billede thesurfer Nybegynder
07. juli 2009 - 22:24 #11
Hmm.. så vil jeg næsten gætte på, at dk-andersson bruger Firefox uden faner, fordi koden fra indlægget "07. juli 2009 kl. 19:52:02| #6" virker i Firefox.

Jeg har kigget i about:config i Firefox, og "dom.allow_scripts_to_close_windows" er sat til false.

Men koden i indlæg #6 virker alligevel.

Det skal lige siges, at jeg bruger version 3.0.11 og ikke 3.5, som er den nyeste version.
Avatar billede dk-andersson Nybegynder
08. juli 2009 - 09:50 #12
Hey

Jeg brugt thesurfers script og det virkede rigtig fint. Efter han havde rettet det til. Så thesurfer smid et svar så får du point.

Jeg bruger faner i firefox men køre med v. 3.5 og der virker det ikke i.
Avatar billede thesurfer Nybegynder
09. juli 2009 - 04:15 #13
Svar.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester