2009-08-11 54 views
8

Giải pháp này hoạt động tốt trong Firefox 3.0+, nhưng IE8/7 chỉ in toàn bộ trang chứ không phải khung nội tuyến cụ thể.In iFrame ẩn trong IE

Đây là chức năng mà được gọi mỗi khi kết nối in được nhấp:

var printfunc= function(){ 
    var url = http://someurl.aspx; 
    //This iFrame has style="visibility: hidden; position: absolute; left: -9000px;" 
    var printIFrame = GetObj('PrintIFrame'); 
    printIFrame.src = url; 
} 

Các aspx đó được nạp vào iframe ẩn gọi là chức năng in trên xử lý sự kiện onload:

<body onload="PrintJS.Print();"> 

Chức năng In:

this.Print = function(){ 
     self.focus(); 
     self.print(); 
     return false; 
} 

Tôi cũng đã thử điều này bằng "cửa sổ" thay vì "tự". Cả hai giải pháp đều hoạt động tốt trong FF nhưng IE dường như không có được phạm vi đúng. Có suy nghĩ gì không? Một giải pháp cross-browser sẽ là tuyệt vời! Ngoài ra, tôi thích sử dụng các kiểu in CSS hơn, nhưng nội dung mà tôi đang in khác với nội dung trên trang, do đó cần phải tải html vào một khung nội tuyến ẩn.

+1

Có phải nó là một máy in bí mật mà không ai biết? (xin lỗi, không thể cưỡng lại :)) – KristoferA

Trả lời

20

Giải pháp: Trong IE, một iframe có khả năng hiển thị: bị ẩn; làm cho trình duyệt in phụ huynh. Thay đổi kiểu thành chiều cao: 0px; chiều rộng: 0px; khắc phục sự cố này.

+0

Nếu chúng ta sử dụng 'display: none;' thay vì 'visibility: hidden;'? Trong trường hợp này, chúng ta không cần thiết lập chiều cao và chiều rộng. – Debiprasad

+0

Tôi có cùng một vấn đề với 'display: none;' tuy nhiên nếu tôi thiết lập chiều cao và chiều rộng là 0, và sau đó chuyển đổi màn hình, làm '.focus()' theo sau là '.print()' sau đó chuyển đổi hiển thị lại, nó hoạt động tốt. – gattsbr

0

Hãy thử document.parentWindow.print(); thay vì self.print() ...

2
Document

phụ huynh:

<!doctype html> 
<html> 
    <head> 
     <script> 
     function printIframe(iframe_id) { 

      if (navigator.appName.toUpperCase() == 'MICROSOFT INTERNET EXPLORER') { 
       document.frames[iframe_id].focus(); 
       document.frames[iframe_id].print(); 
      } else { 
       window.frames[iframe_id].focus(); 
       window.frames[iframe_id].print(); 
      } 
     } 
     </script> 
    </head> 
    <body> 
     <a href="javascript:printIframe('printMe');">Print the iframe.</a> 
     <iframe id="printMe" src="iframe.html"></iframe> 
    </body> 
</html> 

tài liệu iframe:

<!doctype html> 
<html> 
    <head></head> 
    <body> 
     <p>Print this.</p> 
    </body> 
</html> 

Từ liên kết dưới đây: http://www.eggheadcafe.com/PrintSearchContent.asp?LINKID=449

+0

điều này làm việc cho tôi! cảm ơn. – Pons

+0

Giả mạo không phải là như vậy 2013 – Codebeat

+0

Bạn có thể đưa các ý tưởng chính của câu trả lời vào đây không? Không khuyến khích chỉ liên kết câu trả lời. – Thomas

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