Apenas o conteúdo do iframe de JavaScript

Este é o meu código

 var body = "dddddd" var script = "window.print();"; var newWin = $("#printf")[0].contentWindow.document; newWin.open(); newWin.close(); $("body",newWin).append(body+script);   

Isso funciona, mas imprime a página principal. Como faço para imprimir apenas o iframe?

Eu não esperaria que isso funcionasse

tente ao invés disso

 window.frames["printf"].focus(); window.frames["printf"].print(); 

E use

  

Alternativamente tente bom velho

 var newWin = window.frames["printf"]; newWin.document.write('dddd'); newWin.document.close(); 

se o jQuery não puder cortá-lo

Demonstração ao vivo

 document.getElementById("printf").contentWindow.print()​​​​​​; 

A mesma política de origem se aplica.

Maneira fácil (testado em ie7 +, firefox, Chrome, safari) seria este

 //id is the id of the iframe function printFrame(id) { var frm = document.getElementById(id).contentWindow; frm.focus();// focus on contentWindow is needed on some ie versions frm.print(); return false; } 

uma opção alternativa, que pode ou não ser adequada, mas mais limpa se for:

Se você quiser apenas imprimir o iframe da página, poderá ter uma folha de estilo “@media print {}” separada que oculta tudo além do iframe. Então você pode simplesmente imprimir a página normalmente.

Eu tive problemas com todas as soluções acima no IE8, encontrei uma solução decente que é testado no IE 8 + 9, Chrome, Safari e Firefox. Para minha situação, eu precisava imprimir um relatório gerado dinamicamente:

 // create content of iframe var content = ''+ ''+ '(rest of body content)'+ ''+ ''; 

Observe o método javascript printPage () antes da tag body close.

Em seguida, crie o iframe e anexe-o ao corpo pai para que seu contentWindow esteja disponível:

 var newIframe = document.createElement('iframe'); newIframe.width = '0'; newIframe.height = '0'; newIframe.src = 'about:blank'; document.body.appendChild(newIframe); 

Em seguida, defina o conteúdo:

 newIframe.contentWindow.contents = content; newIframe.src = 'javascript:window["contents"]'; 

Aqui estamos definindo a variável de conteúdo dynamic para o object da janela do iframe e, em seguida, invocando-a por meio do esquema javascript :.

Finalmente, para imprimir; concentre o iframe e chame a function javascript printPage () dentro do conteúdo do iframe:

 newIframe.focus(); setTimeout(function() { newIframe.contentWindow.printPage(); }, 200); return; 

O setTimeout não é necessariamente necessário, no entanto, se você estiver carregando grandes quantidades de conteúdo, o Chrome ocasionalmente não conseguirá imprimir sem ele, portanto, essa etapa é recomendada. A alternativa é envolver ‘newIframe.contentWindow.printPage ();’ Tente pegar e coloque a versão envolvida setTimeout no bloco catch.

Espero que isso ajude alguém como eu passei muito tempo para encontrar uma solução que funcionou bem em vários navegadores. Graças ao SpareCycles .

EDITAR:

Em vez de usar setTimeout para chamar a function printPage, use o seguinte:

 newIframe.onload = function() { newIframe.contentWindow.printPage(); } 

Você pode usar este comando:

 document.getElementById('iframeid').contentWindow.print(); 

Este comando basicamente é o mesmo que window.print (), mas como a janela que gostaríamos de imprimir está no iframe, primeiro precisamos obter uma instância dessa janela como um object javascript.

Portanto, em referência a esse iframe, primeiro obtemos o iframe usando seu id e, em seguida, o contentWindow retorna um object de janela (DOM). Assim, podemos usar diretamente a function window.print () neste object.

No momento, não há necessidade da tag de script dentro do iframe. Isso funciona para mim (testado no Chrome, Firefox, IE11 e node-webkit 0.12):

   

Graças a todas as respostas, salve meu dia.

Se você estiver configurando o conteúdo do IFrame usando o javascript document.write() , feche o documento usando newWin.document.close(); caso contrário, o código a seguir não funcionará e a impressão imprimirá o conteúdo da página inteira em vez de apenas o conteúdo do IFrame.

 var frm = document.getElementById(id).contentWindow; frm.focus();// focus on contentWindow is needed on some ie versions frm.print(); 

Use este código para o IE9 e acima:

 window.frames["printf"].focus(); window.frames["printf"].print(); 

Para o IE8:

 window.frames[0].focus(); window.frames[0].print(); 

Eu estou querendo saber qual é o seu propósito de fazer a impressão do iframe.

Conheci um problema semelhante há pouco: usar a visualização de impressão do chrome para gerar um arquivo PDF de um iframe.

Finalmente resolvi meu problema com um truque:

 $('#print').click(function() { $('#noniframe').hide(); // hide other elements window.print(); // now, only the iframe left $('#noniframe').show(); // show other elements again. });