2013-01-22 10 views
19

Ci sono 2 file: index.html e print.htmlblocchi Google Chrome richieste Ajax quando anteprima di stampa viene aperto su finestra secondaria

primo uno contiene un pulsante che apre print.html utilizzando semplici comandi:

window.open("print.html", "_blank", "menubar=yes,toolbar=yes,status,scrollbars,resizable"); 

print.html contiene solo un pulsante che apre la finestra di anteprima di stampa:

<button onclick="window.print();"> 

Il problema rs quando viene aperta la finestra di dialogo di anteprima di stampa. In questo caso, qualsiasi azione su index.html - ovvero il altro file che avvia una richiesta di jax - viene temporaneamente bloccato e messo in coda. E solo quando l'anteprima è chiusa, il browser spara tutte le richieste.

Posso vederlo solo in Google Chrome (24.0.1312.52 m).

Qualcuno può confermare che questo è un bug di Chrome?

+1

Correggimi se sbaglio, ma questo non mi sembra un problema. L'anteprima di stampa non è una finestra di dialogo modale? Perché Ajax richiede il fuoco mentre è aperto? –

+2

index.html e print.html sono due finestre differenti. index ha aperto print.html utilizzando window.open.Print l'anteprima è aperta su print.html. Perché index.html è bloccato? Va bene che la finestra di stampa è bloccata. –

+0

Ah, capisco. Sembra strano davvero. –

risposta

0

Ho riscontrato un problema simile con Chrome: a causa della politica di sicurezza non è possibile accedere ai file locali. Quando mi sto facendo una chiamata AJAX ottengo questo errore

XMLHttpRequest cannot load file:///*. Origin null is not allowed by Access-Control-Allow-Origin. 

Da quello che so - si dovrebbe lanciare Chrome con params:

--allow-file-access-from-files 

Speranza che aiuta.

+0

Avendo lo stesso problema di John, ho paura di dire che '--allow-file-access-from-files' non lo risolve:/ – stuXnet

0

Creare un file .bat, scrivere le seguenti righe. La prima linea è il percorso della tua applicazione Chrome e poi aprila. Ora puoi controllare con questo Chrome.

cd "C:\Program Files (x86)\Google\Chrome\Application" 
chrome --allow-file-access-from-files --disable-web-security 
2

c'è un bug in cui Chrome window.print() non funziona quando c'è un tag nel DOM. Potrebbe essere risolto chiamando questa funzione:

function printPage() { 
    window.print(); 

    //workaround for Chrome bug - https://code.google.com/p/chromium/issues/detail?id=141633 
    if (window.stop) { 
     location.reload(); //triggering unload (e.g. reloading the page) makes the print dialog appear 
     window.stop(); //immediately stop reloading 
    } 
    return false; 
} 
+0

Sto avendo un problema simile e questo si sta verificando su Chrome versione 37.0 .2062.103 m. La tua soluzione ha funzionato solo una volta. Ritentato con la stessa istanza di pagina e la finestra di dialogo di stampa non si apriva dalla pagina window.open'ed. L'ho sbattuto perché era un buon tentativo e forse può essere fatto funzionare. –

+0

Per chi fosse interessato, [qui] (https://code.google.com/p/chromium/issues/detail?id=359627) è l'errore archiviato ... si dice che sia stato risolto in v34 e v35 di Chrome, ma da allora è riapparso. – incutonez

+0

Ho lo stesso problema ma con 2 schede separate (vedi http://stackoverflow.com/questions/42932835/angular-js-print-tab-blocks-http-request-google-chrome). Come posso usare questa soluzione alternativa nel mio caso? – molerat

1

Il server non ha aggiunto intestazioni ORIGIN. È necessario aggiungerlo su .htaccess. Per esempio:

Header add Access-Control-Allow-Origin "*" 
Header add Access-Control-Allow-Headers "origin, x-requested-with, content-type" 
Header add Access-Control-Allow-Methods "PUT, GET, POST, DELETE, OPTIONS" 

Oppure è possibile aggiungere in PHP su print.html (se è possibile utilizzare PHP su file html)

header ("Access-Control-Allow-Origin: *"); 
header ("Access-Control-Allow-Headers: origin, x-requested-with, content-type"); 
header ("Access-Control-Allow-Methods: PUT, GET, POST, DELETE, OPTIONS"); 
1

È necessario installare mod_headers su Apache e impostarlo su .htaccess

Header add Access-Control-Allow-Origin "*" 
Problemi correlati