복붙노트

[JQUERY] 자바 스크립트 인쇄 iframe이 내용 만

JQUERY

자바 스크립트 인쇄 iframe이 내용 만

해결법


  1. 1.나는 일에 그것을 기대하지 않을 것이다

    나는 일에 그것을 기대하지 않을 것이다

    대신 시도

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

    사용

    <iframe id="printf" name="printf"></iframe>
    

    또한 오래된 좋은 시도

    var newWin = window.frames["printf"];
    newWin.document.write('<body onload="window.print()">dddd</body>');
    newWin.document.close();
    

    jQuery를 그것을 해킹 할 수없는 경우

    라이브 데모


  2. 2.

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

    동일 출처 정책이 적용됩니다.


  3. 3.쉬운 방법이 될 것이다이 (IE7 +, 파이어 폭스, 크롬, 사파리에서 테스트)

    쉬운 방법이 될 것이다이 (IE7 +, 파이어 폭스, 크롬, 사파리에서 테스트)

    //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;
    }
    

  4. 4.대체 또는 적합하지 않을 수 있습니다 옵션,하지만 청소기가있는 경우 :

    대체 또는 적합하지 않을 수 있습니다 옵션,하지만 청소기가있는 경우 :

    당신은 항상 그냥 페이지에서 iframe이를 인쇄 할 경우, 별도의 수 "인쇄 @media을 {}"스타일이 iframe이 외에 가죽의 모든. 그럼 그냥 일반적으로 페이지를 인쇄 할 수 있습니다.


  5. 5.이 명령을 사용할 수 있습니다 :

    이 명령을 사용할 수 있습니다 :

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

    이 명령은 기본적으로 window.print ()와 동일하지만 우리가 인쇄하고자하는 창으로 자바 스크립트 객체로 해당 윈도우의 인스턴스를 얻기 위해 우리가 먼저 필요는 iframe에 있습니다.

    그래서, iframe을 참조, 우리는 처음의 ID를 사용하여 iframe 대응을 획득 한 다음의 contentWindow는 창 (DOM) 객체를 반환한다. 그래서 우리는 직접 개체의 window.print () 함수를 사용할 수 있습니다.


  6. 6.내가 IE8 위의 솔루션의 모든 문제를했다, IE 8 + 9, 크롬, 사파리와 파이어 폭스에서 테스트 괜찮은 해결 방법을 발견했다. 내 상황에 동적으로 생성 된 보고서를 인쇄하는 데 필요한 :

    내가 IE8 위의 솔루션의 모든 문제를했다, IE 8 + 9, 크롬, 사파리와 파이어 폭스에서 테스트 괜찮은 해결 방법을 발견했다. 내 상황에 동적으로 생성 된 보고서를 인쇄하는 데 필요한 :

    // create content of iframe
    var content = '<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">'+
    '<head><link href="/css/print.css" media="all" rel="stylesheet" type="text/css"></head>'+
    '<body>(rest of body content)'+
    '<script type="text/javascript">function printPage() { window.focus(); window.print();return; }</script>'+
    '</body></html>';
    

    몸 가까이 태그 전에 printPage () 자바 스크립트 방법을 참고.

    그 contentWindow를 사용할 수 있도록 다음 iframe이를 만들고 부모 본체에 추가 :

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

    다음의 내용을 설정합니다

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

    여기에서 우리는 다음 iframe 대응의 윈도우 객체에 동적 콘텐츠 변수를 설정 자바 스크립트를 통해 호출됩니다 체계를.

    마지막으로 인쇄; iframe을 집중하고 iframe이 콘텐츠 내에서 자바 스크립트 printPage () 함수를 호출 :

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

    에서는 setTimeout은 반드시 필요하지 않습니다하지만 만약 내가 크롬 가끔이 단계 권장 있도록없이 인쇄하지 못했습니다 발견 내용의 당신이있는 거로드 다량. 대안은 래핑하는 것입니다 'newIframe.contentWindow.printPage를 ();' 시도 캐치 장소에서의 setTimeout은 catch 블록에서 버전을 감쌌다.

    내가 여러 브라우저에서 잘 작동 해결책을 찾는 데 많은 시간을 보냈다으로이 사람을 도움이되기를 바랍니다. SpareCycles 감사합니다.

    편집하다:

    대신 다음을 printPage 기능 사용을 호출에서는 setTimeout을 사용 :

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

  7. 7.이 때, iframe을 내부에 스크립트 태그에 대한 필요가 없습니다. (크롬, 파이어 폭스, IE11 및 노드 웹킷 0.12에서 테스트) 나를 위해이 작품 :

    이 때, iframe을 내부에 스크립트 태그에 대한 필요가 없습니다. (크롬, 파이어 폭스, IE11 및 노드 웹킷 0.12에서 테스트) 나를 위해이 작품 :

    <script>
    window.onload = function() {
        var body = 'dddddd';
        var newWin = document.getElementById('printf').contentWindow;
        newWin.document.write(body);
        newWin.document.close(); //important!
        newWin.focus(); //IE fix
        newWin.print();
    }
    </script>
    
    <iframe id="printf"></iframe>
    

    덕분에 모든 대답에, 내 일을 저장합니다.


  8. 8.당신은 당신이 newWin.document.close ()에 의해 문서를 닫아야합니다) (자바 스크립트의 document.write를를 사용하는 경우 IFrame의 내용을 설정하는 경우; 그렇지 않으면 다음 코드는 작동하지 않습니다 및 인쇄 만의 iframe 내용 대신 전체 페이지의 내용을 인쇄합니다.

    당신은 당신이 newWin.document.close ()에 의해 문서를 닫아야합니다) (자바 스크립트의 document.write를를 사용하는 경우 IFrame의 내용을 설정하는 경우; 그렇지 않으면 다음 코드는 작동하지 않습니다 및 인쇄 만의 iframe 내용 대신 전체 페이지의 내용을 인쇄합니다.

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

  9. 9.IE9과 이상이 코드를 사용 :

    IE9과 이상이 코드를 사용 :

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

    IE8의 경우 :

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

  10. 10.나는 모든 작동하지 않을 것입니다 위, 타이프 라이터에서이를 구현하려고 붙어 있었다. 타이프가 contentWindow에 액세스 할 수 있도록 내가 먼저 캐스팅하기 위해 요소를했다.

    나는 모든 작동하지 않을 것입니다 위, 타이프 라이터에서이를 구현하려고 붙어 있었다. 타이프가 contentWindow에 액세스 할 수 있도록 내가 먼저 캐스팅하기 위해 요소를했다.

    let iframe = document.getElementById('frameId') as HTMLIFrameElement;
    iframe.contentWindow.print();
    

  11. 11.나는 iframe이 인쇄를하는 목적 무엇을 궁금해하고있다.

    나는 iframe이 인쇄를하는 목적 무엇을 궁금해하고있다.

    나는 조금 전에 비슷한 문제를 만났다 : 사용 크롬의 인쇄 미리보기를은 iframe의 PDF 파일을 생성 할 수 있습니다.

    마지막으로 나는 트릭 내 문제를 해결했다 :

    $ ( '# 인쇄'). ((기능을 클릭) { $ ( '#의 noniframe') 숨기기 ().; // 숨기기 다른 요소 () window.print; // 지금 만 iframe이 왼쪽 $ ( '#의 noniframe') 쇼 ().; // 다시 다른 요소를 보여줍니다. });

  12. from https://stackoverflow.com/questions/9616426/javascript-print-iframe-contents-only by cc-by-sa and MIT license