Op deze website gebruiken we cookies om content en advertenties te personaliseren, om functies voor social media te bieden en om ons websiteverkeer te analyseren. Ook delen we informatie over uw gebruik van onze site met onze partners voor social media, adverteren en analyse. Deze partners kunnen deze gegevens combineren met andere informatie die u aan ze heeft verstrekt of die ze hebben verzameld op basis van uw gebruik van hun services. Meer informatie.

Akkoord

Vraag & Antwoord

Webprogrammeren & scripting

[javascript] Stack overflow bij geavanceerde printfunctie

None
15 antwoorden
  • Hallo allemaal,

    ik ben bezig met het maken van een op het eerste gezicht simpele en prachtige functie voor mijn site.

    Ik heb namelijk een Star Trek-site (www.warpcore.tk) die helemaal is ontworpen in de interface uit de series en films: oftewel een zwarte achtergrond met (bijvoorbeeld) oranje tekst. Verder veel kleurige elementen. Dat komt er op een printer natuurlijk niet echt mooi uit (zeker niet als zoals bij mij de kleurenprinter, een prachtige all-in-one, kapot is en je alleen een zwart-wit-printer tot je beschikking hebt) en het kost bovendien heel veel inkt.

    Reden dus voor een printervriendelijke versie. Ik heb op het moment (nog) geen beschikking over php dus ik doe het met javascript. Ik pas eerst een ander stylesheet toe, waarin de kleuren anders zijn, en dan gebruik ik window.print();. Even werkte dit, maar nu krijg ik steeds een stack overflow! :o :-?

    Dit is een simpele versie van de code die ik heb gebruikt:

    [code:1:ac22ce0d40]
    function print () {
    document.getElementById('stylesheet').setAttribute('href','../css/printer_friendly.css');
    window.print()
    }
    [/code:1:ac22ce0d40]
    En een knopje (wordt later waarschijnlijk een link) dat de functie aanroept.

    Wat doe ik verkeerd?
    Uiteindelijk moet de functie er zo uit gaan zien:
    Gebruiker klikt op knop -> toepassen printer_friendly.css -> uitprinten document -> terugzetten page.css (oorsponkelijk style sheet).

    Wie kan mij helpen? Wat is er aan de hand?

    Groeten van Lennart Goosens.
  • geef je funcite s een andere naam. t kan zijn dat door die dubbele print de functie recursief wordt aangeroepen, en dan kan je een stack-overflow krijgen
  • Hallo,

    het werkt nu! Bedankt! Ik had al op internet gevonden dat ie misschien recursief zichzelf steeds kon aanroepen maar ik had di tnog nooit gehad, dus besefte ik niet dat ie window.print en function print () als één en dezelfde zag. Maar nu ik dat snap snap ik alles meteen, ook waarom ie op een gegeven moment steeds maar eenzelfde dialoog herhaalde enz.

    Ik had het misschien kunnen weten, maar ik het gewoon nog nooit gehad en ik heb nog niet genoeg kennis van JavaScript om met de fouten om te gaan.

    Toch maar eens een goed boek kopen, altidj als ik een JavaScript-functie maak zit ik uren te ploeteren (gewoon soms om de syntaxis) maar uiteindelijk wordt het altijd mooi. Soms heb ik gewoon even hulp nodig.

    Groeten van Lennart Goosens. :wink:
  • OK, graag gedaan hoor.
    Om de syntax te leren: gewoon heel vaak fout doen, das de enige manier. Wat ook helpt is een taal leren waar je meer mee kan, bijv. PHP, Java, C++. De syntax is in veel opzichten tzelfde, en je kan er vele malen meer mee. Als je dan toch Javascript wil gebuirken, is dat echt een eitje, je moet alleen even weten hoe de standaardfuncites heten, maar daar heb je www voor :wink:
  • [quote:ce39682bac="marientje"]OK, graag gedaan hoor.
    Om de syntax te leren: gewoon heel vaak fout doen, das de enige manier. Wat ook helpt is een taal leren waar je meer mee kan, bijv. PHP, Java, C++. De syntax is in veel opzichten tzelfde, en je kan er vele malen meer mee. Als je dan toch Javascript wil gebuirken, is dat echt een eitje, je moet alleen even weten hoe de standaardfuncites heten, maar daar heb je www voor :wink:[/quote:ce39682bac]
    Precies, ik haal ook altijd heel veel van het internet.

    En PHP ben ik aan het leren: en ik heb zojuist iemand zover gekregen dat ie mij op zijn thuisserver wil hosten (MET PHP! :D) dus dat hoeft ook geen probleem te zijn. De printfunctie werkt iig in IE perfect, nu nog even testen iN Netscape 8.

    Groeten van Lennart Goosens.
  • Toch is dit niet helemaal de manier om het aan te pakken. Wist je dat je gewoon een stylesheet apart kan laden voor het printen? Dan hoeven er geen aparte printknopjes te worden gebruikt/gemaakt en geen aparte stylesheet te worden geladen met javascript…

    <link href="mynormalstyles.css" media="screen" type="text/css">
    <link href="myprintstyles.css" media="print" type="text/css">

    Nu gebruikt de browser mynormalstyles.css voor de bezoekers en myprintstyles.css voor het printen.. gewoon met het gebruik van de printknop in de browser.
  • wow, dat wist ik niet, en t klinkt geweldig!
  • Ik sta versteld! :o Ik lekker moeilijk doen… In welke browsers werkt dit, want het klinkt bijna te mooi!?

    Maar ach ja, waarom makkelijk doen als het moeilijk kan… :wink:
  • Ik wil nog even melden dat ik het nu op de CSS-manier heb gedaan, an het werkt prima. :D
  • werkt dit ook in àlle browsers?
  • [quote:1a7733c756="marientje"]werkt dit ook in àlle browsers?[/quote:1a7733c756]
    Tsja, dat weet ik niet. Waarschijnlijk wle in alle CSS [versie] enablede browsers. Iig werkt het perfect in Mozilla Firefox.
  • wanneer t in IE, Mozilla, Netscape en Opera werkt ben ik al tevree :wink:
  • [quote:92c82fb9ef="marientje"]wanneer t in IE, Mozilla, Netscape en Opera werkt ben ik al tevree :wink:[/quote:92c82fb9ef]
    Mozilla/Firefox/Netscape is praktisch hetzelfde, dus daar werkt het in. IE werkt het ook in, Opera kan ik nog wel ff voor je testen op een andere computer. 8) Ik zal het straks wel ff aan dit bericht toevoegen wat er uit komt.

    [edit]Idd, hij werkt in Opera (versie 7.21), dat wil zeggen: hij gebruikt inderdaad het juiste stylesheet enzo maar voor mijn site werkt de rest niet zo goed: hij print niet de pagina in het iframe, maar de index-pagina met het iframe erop, en zonder de pagina in het iframe. En dat MET het printervriendelijke style sheet dat alleen in de pagina op het iframe is aangegeven! :o Alles wat hier besproken is werkt dus, maar Opera maakt er verder een zootje van (moet ik nog even anders aanpakken heb ik zo het idee :P, maar moet wel op te lossen zijn!)

    Ik heb de tests overigens (om geen papier en inkt te verspillen) gedaan door de Adobe PDF printer te gebruiken (is wel betrouwbaar hoor, gaat net zoals met een echte printer) en is misschien wel een tip als jullie nog eens zoiets willen uittesten (bijvoorbeeld hoe een pagina er uitgeprint uitziet). :P [/edit]
  • dank voor t onderzoek!
    …en voor de tip

    Jammer dat je hierdoor er ook achter kwam dat OPera je site ver****t. Maar ook wel weer goed. Succes ermee!

    :wink:
  • [quote:06d589060f="marientje"]dank voor t onderzoek!
    …en voor de tip

    Jammer dat je hierdoor er ook achter kwam dat OPera je site ver****t. Maar ook wel weer goed. Succes ermee!

    :wink:[/quote:06d589060f]
    BEDANKT! :)
    Nou ja hij ver****t hem alleen bij het printen gelukkig, wat één vervelend foutje betreft rendered hij hem zelfs beter dan IE. :P Wat andere dingen betreft maakt ie dezelfde bokkesprongen als FireFox doet, maar ik vind dat niet zo heel erg (FireFox is mijn favoriete browser, ik gebruik het pas en het is werkelijk fantastisch!). 8)

    Groeten van Lennart Goosens. :D

Beantwoord deze vraag

Dit is een gearchiveerde pagina. Antwoorden is niet meer mogelijk.