web-dev-qa-db-ja.com

Safari / ChromeでJavaScriptからIFrameを印刷する方法

Safari/Chromeでjavascriptを呼び出して、IFrameのコンテンツを印刷するのを手伝ってください。

これはfirefoxで動作します:

$('#' + id)[0].focus();
$('#' + id)[0].contentWindow.print();

これはIEで動作します:

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

しかし、Safari/Chromeでは何も動作しません。

ありがとう

アンドリュー

50
Andrew Bullock

Iframeに印刷関数を配置し、親から呼び出します。

iframe:

function printMe() {
  window.print()
}

親:

document.frame1.printMe()

これが私の完全なクロスブラウザソリューションです:

Iframeページで:

function printPage() { print(); }

メインページで

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

    iframe.focus();
    ifWin.printPage();
    return false;
}

更新:IEこの問題が発生してからリリースされました。この権利を再調査する時間はありません。今、しかし、あなたが立ち往生している場合は、このスレッド全体のすべてのコメントを読むことをお勧めします!

48
Andrew Bullock

Andrewのスクリプトを使用しましたが、printPage()関数が呼び出される前に一部を追加しました。 iframeにはフォーカスが必要です。そうしないと、IEで親フレームが印刷されます。

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

私に感謝しないでください、これを書いたのはアンドリューでした。 Tweakを作成しました= P

32
M.W. Felker

AndrewとMaxのソリューションに加えて、iframe.focus()を使用すると、IE8で子iframeだけを印刷するのではなく、親フレームを印刷することになりました。その行を変更すると修正されました:

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

Firefoxを使用window.framesが、Firefoxでiframeを使用するため、nameプロパティも追加します。

IE:

window.frames[id]

Firefox:

window.frames[name]

<img src="print.gif"  onClick="javascript: window.frames['factura'].focus(); parent['factura'].print();">
<iframe src="factura.html" width="100%" height="400" id="factura" name="factura"></iframe>
4
Luis Garcia

IE8でそれを実現するために、いくつかの変更を加える必要がありました(他のIEフレーバーでテストしませんでした)

1)document.frames [param]はIDではなく番号を受け入れているようです

printIframe(0, 'print');

function printIframe(num, id)
{
  var iframe = document.frames ? document.frames[num] : document.getElementById(id);
  var ifWin = iframe.contentWindow || iframe;

  ifWin.focus();
  ifWin.printPage();

  return false;
}

2)ページの読み込み時に印刷ダイアログが表示され、「ここをクリックして印刷を開始する」へのリンクもありました(自動的に起動しなかった場合)。動作させるには、focus()呼び出しを追加する必要がありました

<script type="text/javascript">
  $(function(){
    printPage();
  });

  function printPage()
  {
    focus();
    print();
  }
</script>
3
Yura Omelchuk

注意すべきことは、file:///を使用してこれをローカルでテストする場合、iframeの関数が未定義として表示されるため、chromeでは動作しません。ただし、Webサーバーではそれが動作します。

3
Blake Hancock

使用できます

parent.frames['id'].print();

Chromeで働く!

0

「framePartsList.contentWindow.print();」 IE 11 ver11.0.43で動作していませんでした

したがって、framePartsList.contentWindow.document.execCommand( 'print'、false、null);を使用しました。

0

使用することもできます

top.iframeName.print();

または

parent.iframeName.print();
0
LENG UNG