Een vraag die veel voorkomt in de verschillende Javascript-forums, vraagt hoe de pagina rechtstreeks naar de printer moet worden gestuurd zonder eerst het afdrukdialoogvenster weer te geven.
In plaats van je dat gewoon te vertellen het kan niet worden gedaan misschien is een verklaring waarom een dergelijke optie niet mogelijk is nuttiger.
Welk dialoogvenster verschijnt wanneer iemand op de knop Afdrukken in zijn browser of Javascript drukt window.print () methode loopt af van het besturingssysteem en welke printers op de computer zijn geïnstalleerd.
Omdat de meeste mensen Windows op hun computer gebruiken, laten we eerst beschrijven hoe de afdrukinstellingen op dat besturingssysteem werken. De * nix- en Mac-besturingssystemen verschillen enigszins in de details, maar zijn over het algemeen vergelijkbaar ingesteld.
Het afdrukdialoogvenster van Windows bestaat uit twee delen. De eerste hiervan maakt deel uit van de Windows API (Application Programming Interface). De API is een set algemene codestukken die worden bewaard in de verschillende DLL-bestanden (Dynamic Link Library) die deel uitmaken van het Windows-besturingssysteem. Elk Windows-programma kan (en moet) de API aanroepen om algemene functies uit te voeren, zoals het weergeven van het dialoogvenster Afdrukken, zodat het in alle programma's op dezelfde manier werkt en geen verschillende opties op verschillende plaatsen heeft zoals de afdrukoptie in DOS deed programmadagen. De Print Dialog API biedt ook een gemeenschappelijke interface waarmee alle programma's toegang hebben tot dezelfde set printerstuurprogramma's in plaats van dat printerfabrikanten stuurprogramma's voor hun printer moeten maken voor elk individueel programma dat deze wilde gebruiken.
De printerdrivers vormen de andere helft van het afdrukdialoogvenster. Er zijn verschillende talen die verschillende printers begrijpen die ze gebruiken om te bepalen hoe de pagina wordt afgedrukt (bijvoorbeeld PCL5 en Postscript). Het printerstuurprogramma instrueert de Print API over het vertalen van het standaard interne afdrukformaat dat het besturingssysteem begrijpt in de aangepaste opmaaktaal die de specifieke printer begrijpt. Het past ook de opties aan die in het dialoogvenster Afdrukken worden weergegeven om de opties weer te geven die door de specifieke printer worden aangeboden.
Op een individuele computer zijn mogelijk geen printers geïnstalleerd, het kan een lokale printer hebben, het kan toegang hebben tot meerdere printers via een netwerk, het kan zelfs zijn ingesteld om af te drukken naar PDF of een vooraf geformatteerd afdrukbestand. Wanneer meer dan één "printer" is gedefinieerd, wordt een van hen de standaardprinter genoemd, wat betekent dat deze degene is die de details in het afdrukdialoogvenster weergeeft wanneer deze voor het eerst verschijnt.
Het besturingssysteem houdt de standaardprinter bij en identificeert die printer voor de verschillende programma's op de computer. Hierdoor kunnen de programma's een extra parameter doorgeven aan de afdruk-API, zodat deze rechtstreeks naar de standaardprinter kan afdrukken zonder eerst het afdrukvenster weer te geven. Veel programma's hebben twee verschillende afdrukopties: een menu-item dat het afdrukdialoogvenster weergeeft en een werkbalkknop voor snel afdrukken die rechtstreeks naar de standaardprinter wordt verzonden.
Wanneer u een webpagina op internet heeft die uw bezoekers gaan afdrukken, heeft u vrijwel geen informatie over welke printer (s) ze beschikbaar hebben. De meeste printers over de hele wereld zijn geconfigureerd om af te drukken op A4-papier, maar u kunt niet garanderen dat de printer op die standaard is ingesteld. Eén Noord-Amerikaans land gebruikt een niet-standaard papierformaat dat korter en breder is dan A4. De meeste printers zijn ingesteld om in portretmodus af te drukken (waarbij de smallere richting de breedte is, maar sommige kunnen worden ingesteld op het landschap waar de langere dimensie de breedte is. Natuurlijk heeft elke printer ook verschillende standaardmarges bovenaan , onderkant en zijkanten van de pagina, zelfs voordat de eigenaren binnenkomen en alle instellingen wijzigen om de printer te krijgen zoals ze willen.
Gezien al deze factoren, kunt u niet zeggen of de standaardprinter met de standaardconfiguratie uw webpagina op A3 met verwaarloosbare marges of op A5 met enorme marges zal afdrukken (met iets meer dan een postzegelformaat in het midden van de pagina). U kunt waarschijnlijk aannemen dat de meeste een afdrukgebied op de pagina hebben van ongeveer 16 cm x 25 cm (plus of min 80%).
Omdat printers zoveel verschillen tussen uw potentiële bezoekers (heeft iemand laserprinters, inkjetprinters, alleen kleuren of zwart-wit, fotokwaliteit, conceptmodus en nog veel meer genoemd), weet u niet wat ze moeten doen om af te drukken uw pagina in een redelijk formaat uit. misschien hebben ze een afzonderlijke printer of een tweede stuurprogramma voor dezelfde printer met totaal verschillende instellingen, specifiek voor webpagina's.
Vervolgens komt de kwestie van wat ze misschien willen afdrukken. Willen ze de hele pagina of hebben ze slechts een deel van de pagina geselecteerd dat ze willen afdrukken? Als uw site frames gebruikt, willen ze alle frames afdrukken zoals ze op de pagina worden weergegeven, willen ze elk frame afzonderlijk afdrukken of willen ze gewoon een specifiek frame afdrukken?
De noodzaak om al deze vragen te beantwoorden, maakt het vrijwel noodzakelijk dat het afdrukdialoogvenster verschijnt wanneer ze iets willen afdrukken, zodat ze ervoor kunnen zorgen dat alle instellingen correct zijn voordat ze op de afdrukknop drukken. De meeste browsers bieden ook de mogelijkheid om een knop "snel afdrukken" toe te voegen aan een van de browserwerkbalken, zodat de pagina kan worden afgedrukt naar de standaardprinter met standaard browserinstellingen over wat er moet worden afgedrukt en hoe.
Browsers maken deze veelheid aan browser- en printerinstellingen niet beschikbaar voor Javascript. Javascript houdt zich primair bezig met het aanpassen van de huidige webpagina en dus bieden webbrowsers minimale informatie over de browser zelf en bijna geen informatie over het besturingssysteem dat beschikbaar is voor Javascript omdat Javascript die dingen niet hoeft te weten om die dingen uit te voeren die Javascript is bedoeld om te doen.
Basisbeveiliging zegt dat als iets als Javascript niet hoeft te weten over het besturingssysteem en de browserconfiguratie om de webpagina te manipuleren, het die informatie niet mag krijgen. Het is niet zoals Javascript de printerinstellingen zou moeten kunnen wijzigen naar de juiste waarden voor het afdrukken van de huidige pagina, want dat is niet waar Javascript voor is - dat is de taak van het afdrukdialoogvenster. Browsers stellen daarom alleen die dingen beschikbaar die Javascript moet weten, zoals de grootte van het scherm, de beschikbare ruimte in het browservenster om de pagina weer te geven, en soortgelijke dingen die Javascript helpen te bepalen hoe de pagina is ingedeeld. De huidige webpagina is de enige zorg van Javascript.
Intranetten zijn natuurlijk een heel andere zaak. Met een intranet weet u dat iedereen die toegang heeft tot de pagina een specifieke browser gebruikt (meestal een recente versie van Internet Explorer) en een specifieke schermresolutie en toegang tot specifieke printers heeft. Dit betekent dat het op een intranet zinvol is om rechtstreeks naar de printer te kunnen afdrukken zonder het afdrukdialoogvenster weer te geven, omdat de persoon die de webpagina schrijft weet op welke printer deze zal worden afgedrukt.
De Internet Explorer-vervanging voor Javascript (JScript genoemd) heeft daarom iets meer informatie over de browser en het besturingssysteem dan Javascript zelf. De afzonderlijke computers op het netwerk met het intranet kunnen mogelijk worden geconfigureerd om de JScript toe te staan window.print () commando schrijf rechtstreeks naar de printer zonder het afdrukdialoogvenster weer te geven. Deze configuratie zou op elke clientcomputer afzonderlijk moeten worden ingesteld en valt veel buiten het bestek van een artikel over Javascript.
Als het gaat om webpagina's op internet, is er absoluut geen manier om een Javascript-opdracht in te stellen om rechtstreeks naar de standaardprinter te verzenden. Als uw bezoekers dat willen doen, moeten ze hun eigen knop "snel afdrukken" instellen op hun browserwerkbalk.