30

ユーザーがページを印刷したときに JavaScript イベントをトリガーすることは可能ですか? ライブラリは画面には適していますが印刷には適していないため、ユーザーがページを印刷することを選択したときに、javascript ライブラリへの依存関係を削除したいと思います。

これを達成する方法はありますか?

4

4 に答える 4

36

Google からのこの回答に出くわした人のために、問題を解決してみましょう。

Ajay が指摘したように、印刷のために発生するイベントが 2 つありますが、十分にサポートされていません。私が読んだ限りでは、それらは Internet Explorer と Firefox (6+) ブラウザーでのみサポートされています。これらのイベントは window.onbeforeprint と window.onafterprint で、(ご想像のとおり) 印刷ジョブの前後に発生します。

ただし、Joe のリンク ( https://stackoverflow.com/a/9920784/578667 ) で指摘されているように、すべてのケースで正確に実装されているわけではありません。ほとんどの場合、両方のイベントがダイアログの前に発生します。また、印刷ダイアログ中にスクリプトの実行が停止され、両方のイベントが同時に発生する場合があります (ダイアログが完了した後)。

これら 2 つのイベントの詳細 (およびブラウザーのサポート) については、次を参照してください。

https://developer.mozilla.org/en-US/docs/DOM/window.onbeforeprint

https://developer.mozilla.org/en-US/docs/DOM/window.onafterprint

簡単に言えば、印刷の流れに干渉したい場合は、干渉しないでください。印刷後にコードをトリガーしたい場合は、期待どおりに機能しません。ブラウザーのサポートが不十分であることを想定して、適切に機能を低下させてください。

于 2013-03-29T23:34:16.583 に答える
15

上書きすることで実行できますwindow.onbeforeprint

window.matchMedia("print").addListener(function() {alert("Print Dialog open.")})Chrome を使用すると、より不可解なものも機能することがわかりました。

この議論の余地のある機能は、ユーザーがページを印刷するのを思いとどまらせるために使用できます。

Scribdで初めて遭遇しました。そこで、メニュー コマンドを使用して印刷ダイアログを開くと、ページ コンテンツがグレー表示され、ページを印刷できない理由を説明する警告ポップオーバー メッセージが表示されます。(完全な分析のための注意: そのページでは、control-p もオーバーライドされているため、印刷ダイアログを開くために使用することはできません。さらに、コンテンツを非表示にするプリンター出力用の @media CSS があります。すべて Firefox でテスト済みです。 )。

于 2014-05-12T13:30:38.683 に答える
0

印刷ダイアログが表示される前、またはドキュメントがプリンター キューに送信された直後に何かを実行するシナリオがある場合は、以下のイベント window.onafterprint 、 window.onbeforeprint を使用できます。

于 2012-06-21T13:18:56.120 に答える