2015-11-23 31 views
11

Ho uno scenario in cui nella mia pagina Web faccio un window.open() che apre un'altra finestra il cui onLoad() invoca window.print(). In questo flusso, il genitore window rimane bloccato bloccando qualsiasi link su cui fare clic. Come farla franca con questo problema?La finestra padre si blocca quando window.open che attiva la stampa su Load

Ad esempio:

pagina Un HTML ha tre link: creare, gestire e stampare. Il codice javascript per il collegamento di stampa è la seguente:

var url = '/actions/print/'; 
    var win = window.open(url,"Title_","resizable=yes,scrollbars=yes,directories=no,titlebar=no,location=no,status=no,menubar=no,width="+width+",height="+height); 

ora, il codice HTML resi da /actions/print è:

<html><body onload="window.print();"> ... Content goes here ...</body></html> 

Quindi, come potete vedere, cliccando sulla stampa apre una nuova finestra e trigger stampare immediatamente. In questo stato, quando torno alla finestra padre con tre collegamenti e provo a fare clic su altri collegamenti, non funziona e appare bloccato.

+1

@drew grazie. – Sripaul

+1

Puoi provare a usare un timeout? 'window.setTimeout (function() {window.print();}, 0);' Dimmi se funziona :) – www139

+0

@Sripaul Quindi, la mia risposta ti ha aiutato in qualche modo? – redrum

risposta

15

Non è possibile risolvere questo problema su OS X. Che sono abbastanza sicuro di aver provato solo su.

Ecco come sono arrivato a questa conclusione dopo aver provato su diversi browser e lastre.

  • Chrome, Safari e Firefox su OS X non ha permesso l'interattività con finestra genitore quando un modale stampa è stato aperto da una finestra figlio (la chiusura della finestra di dialogo di stampa, ma non il pop-up, l'interattività riattivato).

  • IE8 su Win XP, IE11, Chrome e Firefox (tutti su Win7) ha sempre consentito l'interattività con questo stesso scenario.

Questo mi ha portato a credere che questa fosse una limitazione o raccomandazione OS X. Su ulteriori ricerche, ecco cosa ho trovato su developer.apple.com, confermando i miei dubbi:

una finestra di documento modale impedisce all'utente di fare qualsiasi altra cosa all'interno di un particolare documento. L'utente può passare ad altri documenti nell'app e ad altre app. Le finestre di dialogo modali documento dovrebbero essere i fogli, che sono descritti in Utilizzo di finestre di dialogo Modali ai documenti (fogli).

Utilizzare un foglio quando più documenti possono apparire in una singola finestra in momenti diversi. Ad esempio, un browser a schede può visualizzare diversi documenti in una singola finestra in momenti diversi. Un foglio è appropriato in questa situazione, anche se si applica solo al documento attualmente visibile nella finestra. Poiché gli utenti di devono effettivamente ignorare il documento corrente prima di visualizzare un documento diverso nella stessa finestra, è necessario prima ignorare il foglio.

https://developer.apple.com/library/mac/documentation/UserExperience/Conceptual/OSXHIGuidelines/WindowDialogs.html