2012-02-13 11 views
8

Penso che la risposta a questo è quasi certamente "no", perché ho fatto un po 'di test e di ricerca in giro, ma c'è qualche trucco per rilevare se window.print() funziona dall'interno di un pagina (cioè da JavaScript)? So che anche su un desktop/laptop non sarà mai possibile sapere se nel sistema è installata una stampante, ad esempio, ma almeno il browser aprirà una finestra di dialogo di stampa.Determinare se il browser supporta la stampa

Il mio telefono Android ha una funzione window.print() ma (non sorprendentemente) non fa nulla.

Ancora una volta mi sto chiedendo per lo più quindi c'è una buona domanda sul tema a SO :-)

risposta

5

Sfortunatamente sembra che un no. La funzione window.print() non fa parte delle specifiche di EMCAScript. Ciò significa che non è necessario che faccia parte del linguaggio JavaScript e non abbia una documentazione adeguata per la sua implementazione. È un comportamento indefinito e quindi testare sembra molto difficile.

Fonti:

EDIT:

Carino piccolo script che ho scritto alla prova le mie browser, basta controlla esiste la funzione di stampa e poi chiede stampare:

if(window.print) { 
    if(confirm('I can print. Would you like to?')) 
     window.print() 
} 
+0

Sì, questo è ciò che avevo deciso di fare. Bene, forse ora questo sarà anche un buon punto di riferimento :-) – Pointy

+2

Ho anche scritto questo per testare i miei browser: http://jsfiddle.net/zdY4d/4/ – Jivings

+0

@Jivings aggiungi il violino alla tua risposta ... – powtac

5

Il metodo print() è sincrona. Ciò rende possibile fare le conseguenze al fine di decidere se è stata mostrata una finestra di dialogo di stampa

var start = +new Date(); 
window.print(); 
var delta = + new Date() - start; 
console.log(delta); 
if (delta > 100) { console.log('It worked'); } 
+0

Anche se l'utente deve provare a stampare per verificare se può stampare :). Ad ogni modo è possibile usare questo script e mostrare un messaggio se la stampa fallisce (non delta> 100). – Fernando

+0

Suppongo che se un browser definisce window.print (per evitare la rottura di script che tenta di chiamarlo) ma in realtà non fa nulla che richiederebbe meno di 100ms per elaborare la prossima riga di codice. Mi piace. Spero solo che ci fosse un modo per testare senza realmente chiamarlo! Questa è la soluzione migliore che abbia mai visto, però. – jinglesthula

+1

BTW, nel caso qualcuno si stia interrogando sul segno più, http://stackoverflow.com/questions/221539/what-does-the-plus-sign-do-in-return-new-date – jinglesthula

Problemi correlati