52

Safari/Chrome で JavaScript を呼び出して IFrame の内容を印刷する方法を教えてください。

これはFirefoxで機能します:

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

これはIEで機能します:

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

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

ありがとう

アンドリュー

4

11 に答える 11

49

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

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 のバージョンでは、多くの人がこれに問題を抱えているようです。今はこれを再調査する時間はありませんが、行き詰まっている場合は、このスレッド全体のすべてのコメントを読むことをお勧めします!

于 2009-01-23T15:41:02.370 に答える
42

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

iframe:

function printMe() {
  window.print()
}

親:

document.frame1.printMe()
于 2009-01-23T15:18:35.347 に答える
33

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

これを書いたのは Andrew でした。微調整しました= P

于 2010-05-26T16:10:45.233 に答える
8

In addition to Andrew's and Max's solutions, using iframe.focus() resulted in printing parent frame instead of printing only child iframe in IE8. Changing that line fixed it:

function printIframe(id)
{
    var iframe = document.frames ? document.frames[id] : document.getElementById(id);
    var ifWin = iframe.contentWindow || iframe;
    ifWin.focus();
    ifWin.printPage();
    return false;
}
于 2011-04-20T15:52:20.817 に答える
4

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

いいえ:

window.frames[id]

ファイアフォックス:

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>
于 2010-10-28T15:42:40.780 に答える
3

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

于 2010-12-07T15:22:11.623 に答える
3

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>
于 2011-12-07T21:23:48.513 に答える
0

使用することもできます

top.iframeName.print();

また

parent.iframeName.print();
于 2016-02-12T00:08:23.163 に答える
0

使用できます

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

クロムで働こう!

于 2015-01-21T14:37:23.920 に答える
-4

これを使って:

window.onload = setTimeout("window.print()", 1000);
于 2010-11-24T15:35:20.867 に答える