Google Chrome блокирует запросы ajax при открытии предварительного просмотра в дочернем окне
Есть 2 файла: index.html
и print.html
Первый содержит кнопку, которая открывает print.html
с помощью простой команды:
window.open("print.html", "_blank", "menubar=yes,toolbar=yes,status,scrollbars,resizable");
print.html
содержит только одну кнопку, открывающую диалоговое окно предварительного просмотра:
<button onclick="window.print();">
Проблема возникает при открытии диалогового окна предварительного просмотра. В этом случае любое действие на index.html
, то есть другой файл, инициирующий запрос ajax, временно блокируется и помещается в очередь. И только тогда, когда предварительный просмотр закрыт, браузер запускает все запросы.
Я вижу это только в Google Chrome (24.0.1312.52 м).
Кто-нибудь может подтвердить, что это ошибка Chrome?
Ответы
Ответ 1
есть ошибка Chrome, где window.print()
не работает, когда в DOM есть тег. Это можно решить, вызвав эту функцию:
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;
}
Ответ 2
Ваш сервер не добавил заголовки ORIGIN.
Вам нужно добавить его в .htaccess. Например:
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"
Или вы можете добавить его в PHP на print.html(если вы можете использовать PHP в 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");
Ответ 3
Вам нужно установить mod_headers
на Apache и установить его на .htaccess
Header add Access-Control-Allow-Origin "*"
Ответ 4
У меня была аналогичная проблема с Chrome - из-за политики безопасности он не может обращаться к локальным файлам.
Когда я делаю вызов AJAX, я получаю эту ошибку
XMLHttpRequest cannot load file:///*. Origin null is not allowed by Access-Control-Allow-Origin.
Из того, что я знаю, вы должны запустить Chrome с параметрами:
--allow-file-access-from-files
Надеюсь, что это поможет.
Ответ 5
Создайте файл .bat
, напишите следующие строки. 1-я строка - это путь вашего приложения Chrome, а затем откройте его. Теперь вы можете проверить этот Chrome.
cd "C:\Program Files (x86)\Google\Chrome\Application"
chrome --allow-file-access-from-files --disable-web-security