2013-09-04 36 views
20

Tôi đang đối mặt với một vấn đề thực sự lạ. Tôi đang gọi window.print() từ một tập tin javascript. Điều này làm việc tốt trong Safari, IE, Firefox ... và cho đến hai giờ trước, nó cũng hoạt động trong Chrome. (Phiên bản 29.0.1547.57)Chrome: window.print() đối thoại in chỉ mở sau khi tải lại trang (javascript)

Tôi không thay đổi bất kỳ thứ gì cần thiết trong tệp javascript của mình (thực sự - tôi vừa xóa một số nhận xét ...), nhưng điều gì xảy ra thực sự lạ: Trong Chrome, hộp thoại in không mở khi window.print() được gọi. Chẳng có gì xảy ra. Nhưng sau đó, khi tôi nhấn tải lại, hộp thoại in sẽ mở ra ngay lập tức.

Hành vi trong trình duyệt khác không thay đổi. Và trong khi gỡ lỗi trong Chrome, tôi có thể thấy window.print() được gọi như mong đợi và kịch bản tiếp tục sau đó. Chỉ hộp thoại in không được hiển thị cho đến khi nhấn tải lại.

Có ai từng trải nghiệm điều gì đó như thế không? Tôi cũng đã cố gắng gọi window.print() trong setTimeout(), nhưng điều này không thay đổi gì cả. Khi tôi gỡ lỗi nội dung của trang sẽ được in xuất hiện để được tải hoàn toàn.

Tôi rất tiếc khi yêu cầu, nhưng tôi không tìm thấy gì trong khi nghiên cứu. Bất kỳ trợ giúp sẽ được đánh giá cao!

Cảm ơn bạn!

+1

Điều này có thể là do yêu cầu mạng đang mở khi bạn gọi window.print()? Xem https://code.google.com/p/chromium/issues/detail?id=285690 và/hoặc http://stackoverflow.com/questions/14961769/javascript-window-print-intermittently-working-in-chrome cho sự cố tương tự. – natevw

+0

Tôi quản lý để khắc phục điều này bằng cách thêm 'jquery.min.map' vào thư mục dự án của tôi. Kiểm tra trong tab Mạng trong Công cụ dành cho nhà phát triển cho bất kỳ tệp đang chờ xử lý nào. Cung cấp một con đường thích hợp hoặc loại bỏ nó sẽ giải quyết vấn đề – rafaelcastrocouto

Trả lời

0

Tôi chắc chắn bạn đang gặp phải sự cố này vì bạn có phần tử video trên trang của mình - hầu hết có thể là MP4.

Nếu bạn tắt video này hoặc có video OGV thay vào đó, quá trình in sẽ hoạt động tốt. Đây là lỗi trong bản thân Chrome do những hạn chế của việc triển khai video của Chrome. Nó cũng quan trọng cần lưu ý rằng nếu các bản in sử dụng bằng tay với ctrl-p/cmd-p, chức năng in một cách chính xác

http://code.google.com/p/chromium/issues/detail?id=141633

Hope this helps :)

+1

Cảm ơn bạn đã trả lời! Đây không phải là giải pháp - đó là một vấn đề với thứ tự của các cuộc gọi. (Tôi vẫn chưa thực sự hiểu nó ....) – oskar1983

+0

Bạn có thể xây dựng trên những gì bạn đã làm để sửa chữa nó @ oskar1983? – Clayton

+0

@Oscar - Nếu bạn có thẻ video, vui lòng tải lên nội dung video của bạn ở định dạng OGV. Điều này sẽ giải quyết vấn đề của bạn. :) – Wasiim

2

tôi có chính xác cùng một vấn đề với Chrome. Bạn cần phải tải lại trang theo cách thủ công:

<a href="javascript:window.print();window.location.reload()">Print</a> 
7

Từ kinh nghiệm của tôi, điều này là do lưu lượng truy cập nền được tiếp tục, ví dụ: các cuộc gọi ajax và các cuộc gọi tương tự ngăn Chrome cảm thấy trang đó được tải hoàn toàn. Việc tải lại sẽ phá vỡ tất cả lưu lượng truy cập và do đó hộp thoại in bật lên. Đây là một bản ghi cụ thể trong Visual Studio 2013, trong đó BrowserLink liên tục đánh dấu trong nền. Điều này có thể được kiểm tra bằng cách tắt BrowserLink qua cài đặt bên dưới:

<configuration> 
    <appSettings> 
     <add key="vs:EnableBrowserLink" value="false"/> 
    </appSettings> 
</configuration> 
+0

đây là một phao cứu sinh - cảm ơn bạn! – user158017

+0

Điều này đã làm tôi khó chịu đến tuổi tôi cho đến khi tôi tìm thấy câu trả lời này. Trong trường hợp của tôi, đây cũng là giải pháp tốt hơn câu trả lời đầu tiên vì điều này chỉ xảy ra ở chế độ gỡ lỗi trong VS2013. Trang web được xuất bản của tôi, do đó khi không chạy từ VS, không có vấn đề gì. – Neville

14

Wasiim là đúng, có một lỗi Chrome nơi window.print() không hoạt động khi có một thẻ <video> trong DOM. Tôi đã giải quyết nó bằng cách gọi chức năng 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

Dừng di chuyển thông minh. Chỉ cần tò mò, làm thế nào nó xảy ra với bạn rằng dừng tải lại sẽ làm việc? Bản thân tôi, tôi có thể đã đi lên với tải lại và đánh dấu vấn đề là giải quyết. – Martin

+1

@Martin, chỉ cần tải lại về cơ bản sẽ khắc phục sự cố nhưng khi hộp thoại In đã đóng, trang sẽ tải lại. Vì vậy, tôi đã nghĩ dừng việc tải lại bằng cách sử dụng 'window.stop'. – noypiscripter

2

Nếu bất kỳ cơ hội nào đó đang sử dụng VS2013 với chrome, vấn đề này là do tính năng BrowserLink funcionality.

see SO answer here

0

hành vi tương tự trong Safari. Đó là do yêu cầu HTTP mở (s) trên nền.

Khi có bất kỳ yêu cầu HTTP nào đang được tiến hành, window.print() được thực hiện thành công, nhưng không có hộp thoại nào được mở!

Bạn sẽ gặp sự cố này, khi bạn sử dụng số bỏ phiếu dài (để đẩy máy chủ). Vì khách hàng sẽ đã mở kết nối HTTP trong một thời gian dài, window.print() sẽ không bao giờ hoạt động.

Các vấn đề liên quan