javascript - domain - Google Chrome bloquea las solicitudes ajax cuando se abre la vista previa de impresiĆ³n en la ventana secundaria
xmlhttprequest cors (5)
Tuve un problema similar con Chrome: debido a la política de seguridad, no puede acceder a los archivos locales. Cuando estoy haciendo una llamada AJAX obtengo este error
XMLHttpRequest cannot load file:///*. Origin null is not allowed by Access-Control-Allow-Origin.
Por lo que sé, deberías ejecutar Chrome con params:
--allow-file-access-from-files
Espero eso ayude.
Hay 2 archivos: index.html
e print.html
El primero contiene un botón que abre print.html
usando un comando simple:
window.open("print.html", "_blank", "menubar=yes,toolbar=yes,status,scrollbars,resizable");
print.html
contiene solo un botón que abre el cuadro de diálogo de vista previa de impresión:
<button onclick="window.print();">
El problema aparece cuando se abre el cuadro de diálogo de vista previa de impresión. En este caso, cualquier acción en index.html
, es decir, el otro archivo que inicia la solicitud ajax, se bloquea temporalmente y se coloca en la cola. Y solo cuando la vista previa se cierra el navegador dispara todas las solicitudes.
Solo puedo verlo en Google Chrome (24.0.1312.52 m).
¿Alguien puede confirmar que este es el error de Chrome?
Crea un archivo .bat
, escribe las siguientes líneas. La 1.ª línea es la ruta de su aplicación de Chrome y luego la abre. Ahora puedes verificar con este Chrome.
cd "C:/Program Files (x86)/Google/Chrome/Application"
chrome --allow-file-access-from-files --disable-web-security
Su servidor no agregó encabezados de ORIGEN. Necesita agregarlo en .htaccess. Por ejemplo:
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"
O puede agregarlo en PHP en print.html (si puede usar PHP en archivos 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");
hay un error de Chrome donde window.print()
no funciona cuando hay una etiqueta en el DOM. Podría resolverse llamando a esta función:
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;
}
Necesita instalar mod_headers
en Apache y configurarlo en .htaccess
Header add Access-Control-Allow-Origin "*"