18

ユーザーが特定の Web ページを印刷したときに、データベースに情報を送り返したいと考えています。私は IE でこれを行うことができますがonbeforeprint()onafterprint()ブラウザに依存しない方法で同じことを行いたいと思います。それが完了する限り、どのテクノロジーの組み合わせ (PHP、MySQL、JavaScript、HTML) を使用する必要があるかは気にしません。何か案は?

編集:

これにはまだいくつかの問題があります。自分の関数をPrint.css画像として入れてみましたが、どうにか台無しにしています。次に、イベントリスナーを追加しようとしましたが、それもうまく機能しません。任意のブラウザで印刷する直前に関数を呼び出す方法について、誰かが詳細を提供していただければ幸いです。

編集:

私は今のところこれをあきらめています。私は自分がやりたいことを別の方法で解決しました。FireFox が onbeforeprint() と onafterprint() をサポートする日を楽しみにしています。

4

4 に答える 4

33

現在、多くのブラウザが をサポートしてwindow.matchMediaいます。この API を使用すると、CSS メディア クエリがいつ有効になるかを検出できます (画面の回転やドキュメントの印刷など)。クロスブラウザー アプローチの場合はwindow.matchMediawindow.onbeforeprint/と組み合わせwindow.onafterprintます。

beforePrint()次の例では、 andが複数回呼び出される可能性がありますafterPrint()(たとえば、印刷プレビューが再生成されるたびに、Chrome はリスナーを起動します)。これは、印刷に応じて実行している特定の処理に応じて、望ましい場合とそうでない場合があります。

if ('matchMedia' in window) {
    // Chrome, Firefox, and IE 10 support mediaMatch listeners
    window.matchMedia('print').addListener(function(media) {
        if (media.matches) {
            beforePrint();
        } else {
            // Fires immediately, so wait for the first mouse movement
            $(document).one('mouseover', afterPrint);
        }
    });
} else {
    // IE and Firefox fire before/after events
    $(window).on('beforeprint', beforePrint);
    $(window).on('afterprint', afterPrint);
}

詳細: http://tjvantoll.com/2012/06/15/detecting-print-requests-with-javascript/

于 2013-03-27T15:27:57.293 に答える
5

他のブラウザで許可されるかどうかはわかりません。もちろん、印刷スタイルシートのどこかに画像を指定することもできます。これはおそらく印刷でのみ呼び出されます。onbeforeprint

于 2010-07-26T23:52:56.923 に答える
3

window.print()あなた自身でネイティブをマスキングしてみてください...

// hide our vars from the global scope
(function(){

  // make a copy of the native window.print
  var _print = this.print;

  // create a new window.print
  this.print = function () {
    // if `onbeforeprint` exists, call it.
    if (this.onbeforeprint) onbeforeprint(this); 
    // call the original `window.print`.
    _print(); 
    // if `onafterprint` exists, call it.
    if (this.onafterprint) onafterprint(this);
  }

}())

更新: コメント。

于 2010-07-26T23:55:51.220 に答える
-1

これをきちんと行うことは不可能だと思います。または、少なくとも-私が知っているテクノロジーでも、以前に与えられた答えでもありません。

onafterprintとサーバーサイドの動的画像生成スクリプトの両方を使用すると、訪問者が単に印刷プレビューモードに移行してキャンセルした場合でも、ページが印刷されたことがわかります。

ただし、実際にページが印刷されていることを確認できるように、適切な情報を取得する方法を学びたいと思います。

于 2012-08-22T21:22:51.230 に答える