2010-07-15 41 views
8

Trang web của tôi có nút "in trang này".Safari: Ngăn hai hộp thoại in khi in Iframe

Tôi tải tệp HTML mẫu tĩnh tĩnh vào một iframe ẩn, sao chép HTML vào trang đó bằng jQuery và gọi window.print() từ trang Iframe. Tất cả là tốt, ngoại trừ Safari, mà muốn in khung cha mẹ là tốt, vì vậy tôi nhận được hai hộp thoại in mở.

Tôi đã thử gọi window.print từ bên trong khung nội tuyến và gọi nó từ cha mẹ, nhắm mục tiêu khung nội tuyến (document.printFrame.window.print()) nhưng tôi nhận được hai hộp thoại bất kể.

Có ai biết cách này không? Tôi chỉ muốn in Iframe, chứ không phải cha mẹ.

Trả lời

1

Tôi không thể tạo lại lỗi; nó hoạt động tốt cho tôi (ví dụ: tôi chỉ nhận được một hộp thoại In), bất kể tôi có gọi nó từ khung nội tuyến hoặc khung chính hay không. Có lẽ bạn đang gọi window.print() hai lần ở đâu đó?

Tôi đang chạy Safari 4.0.3 trên Mac OS X 10.6

EDIT: Ở đây nó là: http://jsfiddle.net/Kq9dc/

EDIT 2: tôi chỉ thử nghiệm này trên Safari 5.0/Windows 7 và nó đang hoạt động chính xác. Bạn có chắc chắn nó không phải là một cái gì đó khác trong mã của bạn?

EDIT 3: Chỉ cần thử nghiệm này trên một số phiên bản của Safari trên WinXP:

Safari 3.0 (first beta): Not working (no print dialog) 
Safari 3.1 (first non-beta): Works fine 
Safari 4.0: Works fine 
Safari 5.0: Works fine 
+0

Nếu tôi gọi nó hai lần, tôi mong đợi hành vi tương tự trên các trình duyệt khác. Hmmm ... –

+0

@Diodeus bạn có nhận được 2 hộp thoại in với [fiddle] của tôi (http://jsfiddle.net/Kq9dc/) không? – quantumSoup

+0

@Diodeus Ran kiểm tra nhiều hơn, họ dường như làm việc tốt – quantumSoup

0

Hãy thử điều này. Đặt trong này nói iframe:

function printPage() { print(); } 

sau đó trong các phụ huynh:

function printIframe(id) 
{ 
    var iframe = document.frames ? document.frames[id] : document.getElementById(id); 
    var ifWin = iframe.contentWindow || iframe; 
    iframe.focus(); 
    ifWin.printPage(); 
    return false; 
} 

nên đây không phải làm việc một trong hai, tôi muốn thử mở ra một cửa sổ mới/tab, và điền nó với HTML có thể in .

var printwin = window.open("about:blank", "_new"); 
printwin.document.open(); 
printwin.document.write("HTML goes here..javascript which is going to print is in there too.."); 
printwin.document.close(); 

Hai điều nhỏ để xem ra cho là

  • chia </script> trong cửa sổ mới, do đó bạn không chấm dứt sớm
  • setTimeout sử dụng() để thực hiện sau khi onLoad() đã hoàn tất , nếu không người dùng Firefox có thể thấy một trang trống bên dưới hộp thoại in
Các vấn đề liên quan