2009-10-30 7 views
6

Ich versuche Iframe-Inhalt zu drucken.Iframe-Inhalt in Opera und Chrome drucken

contentWindow.focus(); 
contentWindow.print(); 

Dieser Code funktioniert in IE, Firefox und Safari. Aber arbeite nicht in Chrome und Opera. Diese Browser drucken die gesamte Seite.

Ich habe versucht, dieses Thema How do I print an IFrame from javascript in Safari/Chrome zu verwenden. Aber es hat mir nicht geholfen.

Könnte mir jemand helfen?

+0

Aus dem verlinkten Artikel es zumindest für Chrome scheint, wie Sie haben sollte Erfolg. Ist der Iframe auf einer anderen Domain? – Paul

+0

Nein. Es stammt aus derselben Domäne. –

Antwort

4

Dies ist ein bekannter Fehler in Opera. Zusätzlich zu den oben genannten Ideen für Abhilfen, können Sie mit so etwas spielen:

var clone=document.documentElement.cloneNode(true) 
    var win=window.open('about:blank'); 
    win.document.replaceChild(clone, win.document.documentElement); 
    win.print(); 

ich nicht getestet haben, aber es sollte eine Kopie der Seite in einem Popup-Fenster und drucken Sie es schaffen, ohne um den Inhalt ein zweites Mal vom Server zu laden oder irgendwelche DOM-Änderungen zu verlieren, die Sie drucken möchten.

2

Wie ich verstehe, ist es unmöglich, iframe-Druck zu implementieren, ohne ein neues Fenster zu öffnen.

Meine Druckfunktion:

if ($.browser.opera || (/chrome/.test(navigator.userAgent.toLowerCase()))) { 
    var href = contentWindow.location.href; 
    href = href.indexOf("?") > -1 ? href + "&print=1" : href + "?print=1"; 
    var printWindow = window.open(href, "printWindow", "scrollbars=yes"); 
    printWindow.focus(); 
} 
else { 
    contentWindow.focus(); 
    contentWindow.print(); 
} 

Auch habe ich den folgenden Code an das Ende des Körpers (wenn Druck == 1):

<script type='text/javascript'> 
    function invokePrint() { 
    if (document.readyState && document.readyState!='complete') 
     setTimeout(function() { invokePrint(); }, 50); 
    else if (document.body && document.body.innerHTML=='false') 
     setTimeout(function() { invokePrint(); }, 50); 
    else { 
     focus(); 
     print(); 
    } 
    } 
    invokePrint(); 
</script> 
1

ich Ihr Problem mit Chrome nicht wiedergeben kann. Opera druckt tatsächlich immer noch die gesamte äußere Seite, wenn sie versucht, nur den iframe zu drucken.

Ich habe eine Problemumgehung entwickelt und obwohl es meistens funktioniert, ist es nicht 100% ausfallsicher (unter anderem, weil Opera Zeilen zum Drucken umschließt; ich weiß nicht, wie man die richtige Höhe in solchen Fällen berechnet). Das heißt, der folgende Code funktioniert zumindest zumutbar (mit jQuery für die Bequemlichkeit):

Hoffe das hilft.

0

Ich habe versucht, über Code und nach Änderungen an den oben genannten Codes machen ich mit schlüssigen Code kam als

folgt
var win=window.open('about:blank'); 
win.document.write('<html><head></head><body>'); 
win.document.write('<iframe frameBorder="0" align="center" src="'+window.location.href+'" onload="test()" style="width: 619px; height: 482px;"></iframe>'); 
win.document.write('<scr'+'ipt>function test(){window.focus();window.print()}</sc'+'ript></body></html>'); 
win.document.close(); 
if (window.focus) {win.focus()} 

versuchen Sie dieses