2013-01-22 27 views
19

Có 2 file: index.htmlprint.htmlkhối Google Chrome yêu cầu ajax khi xem trước khi in được mở trên cửa sổ con

một đầu chứa một nút mở print.html sử dụng lệnh đơn giản:

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

print.html chỉ chứa một nút mở hộp thoại xem trước bản in:

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

Vấn đề appea rs khi hộp thoại xem trước bản in được mở ra. Trong trường hợp này, bất kỳ hành động nào trên index.html - tức là tệp khác bắt đầu yêu cầu ajax - tạm thời bị chặn và được xếp vào hàng đợi. Và chỉ khi xem trước được đóng trình duyệt sẽ kích hoạt tất cả các yêu cầu.

Tôi chỉ có thể xem trong Google Chrome (24.0.1312.52 m).

Ai đó có thể xác nhận rằng đây là lỗi của Chrome?

+1

Đúng nếu tôi sai, nhưng điều này nghe có vẻ không giống với tôi. Không phải bản xem trước bản in là một hộp thoại phương thức sao? Tại sao Ajax yêu cầu kích hoạt khi nó đang mở? –

+2

index.html và print.html là hai cửa sổ khác nhau. index được mở bằng cách sử dụng window.open.Print xem trước được mở trên print.html. Tại sao index.html bị chặn? OK khi cửa sổ in bị chặn. –

+0

Ahh, tôi hiểu rồi. Điều đó nghe có vẻ kì lạ. –

Trả lời

0

Tôi gặp sự cố tương tự với Chrome - vì chính sách bảo mật không thể truy cập tệp cục bộ. Khi tôi đang làm cho một cuộc gọi AJAX tôi nhận được lỗi này

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

Từ những gì tôi biết - bạn nên khởi động Chrome với params:

--allow-file-access-from-files 

Hy vọng nó giúp.

+0

Có cùng vấn đề với John, tôi sợ phải nói rằng '--allow-file-access-from-files' không giải quyết được:/ – stuXnet

0

Tạo tệp .bat, viết các dòng sau. Dòng đầu tiên là đường dẫn của Ứng dụng Chrome của bạn và sau đó mở nó. Bây giờ bạn có thể kiểm tra với Chrome này.

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

có lỗi Chrome trong đó window.print() không hoạt động khi có thẻ trong DOM. Nó có thể được giải quyết bằng cách gọi hàm này:

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

Tôi đang gặp sự cố tương tự và sự cố này xảy ra trên Chrome Phiên bản 37.0 0,2062,103 m. Giải pháp của bạn chỉ hoạt động một lần. Đã thử lại với cùng một thể hiện trang và hộp thoại in không mở từ trang window.open'ed. Tôi đã đẩy nó lên vì nó là một nỗ lực tốt và có thể được thực hiện để làm việc. –

+0

Đối với những người quan tâm, [ở đây] (https://code.google.com/p/chromium/issues/detail?id=359627) là lỗi được lưu ... nó nói rằng nó đã được sửa trong v34 và v35 của Chrome, nhưng kể từ đó đã xuất hiện trở lại. – incutonez

+0

Tôi gặp vấn đề tương tự nhưng với 2 tab riêng biệt (xem http://stackoverflow.com/questions/42932835/angular-js-print-tab-blocks-http-request-google-chrome). Làm thế nào tôi có thể sử dụng cách giải quyết này trong trường hợp của tôi? – molerat

1

Máy chủ của bạn không được thêm tiêu đề ORIGIN. Bạn cần thêm nó trên .htaccess. Ví dụ:

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" 

Hoặc bạn có thể thêm nó vào PHP trên print.html (nếu bạn có thể sử dụng PHP trên 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

Bạn cần cài đặt mod_headers trên Apache và đặt nó trên .htaccess

Header add Access-Control-Allow-Origin "*" 
Các vấn đề liên quan