ほとんどクロスブラウザの前印刷

Internet Explorerの場合、彼らは最初にbeforeprintイベントとafterprintイベントを実装し、長い間、それらをサポートしていたのは彼だけでした。 その後、Mozillaは自身のブラウザの第6バージョンからこれらのイベントをサポートしました 。 非常に長い間 、Webkitは実装を敢えてせず 、最終的には完全に破棄し、 matchMediaインターフェイスについて言及しました。 作者が理解できる限り、OperaはイベントまたはmatchMediaを実装しませんでしたが、この問題の不十分なグーグルは除外されません。

上記に基づいて、beforeprintメソッドとafterprintメソッドのサポートを追加する簡単なjQueryプラグインを読者と共有したいと思います。



/ **
* @著者Alexander Burtsev
* @descriptionイベントafterprintおよびbeforeprintのほぼクロスブラウザー処理
* @jQuery 1.7以降が必要
* /
$。 fn beforeprint = function (コールバック) {
$ ( this )を 返します。 各 ( 関数 ( ) {
if ( ! jQuery。isWindow ( this ) )
帰る
if ( this。onbeforeprint !== undefined )
$ ( これ ) 。 on ( 'beforeprint' 、 callback ) ;
else if ( this。matchMedia )
これ 。 matchMedia ( 'print' ) 。 addListener (コールバック) ;
} ) ;
} ;
$。 fn 。 afterprint = function (コールバック) {
$ ( this )を 返します。 各 ( 関数 ( ) {
if ( ! jQuery。isWindow ( this ) )
帰る
if ( this。onafterprint !== undefined )
$ ( これ ) 。 on ( 'afterprint' 、 callback ) ;
else if ( this。matchMedia )
これ 。 matchMedia ( 'media' ) 。 addListener (コールバック) ;
} ) ;
} ;


使用について



ユーザーが印刷するページがサイトにあるとします。 たとえば、 Googleマップを検討します (Yandexマップを検討するのは愛国的ですが、特別なボタンをクリックするだけで別のページに印刷されます)。 Google Chromeで印刷する場合、次のようなものが表示されます。

画像

Googleはそれを簡単かつ美しく行いました。 css media printを使用して、不要な要素をすべて削除し、残りの要素を印刷用に定型化して、正直に「この方法は間違った結果につながる可能性があるため、印刷リンクを使用した方が良い」と書いています。

グーグルは何を見逃しましたか? 彼は地図をクロムで印刷したものの中央に配置しません。 オリジナルでは、モスクワの著者を中心に、ここでシフトされています。 さらに、画面の幅が大きいほど、オフセットが強くなります。 これは、Googleマップが印刷メディアの地図を更新するために単純なJavaScriptを実行しないという事実によるものです。

上記のプラグインを使用してバグを修正します。

//私のユースケース
( 関数 ( ) {
var _links = $ ( 'link [media = "print"]' ) ;

$ (ウィンドウ)
。 beforeprint ( 関数 ( ) {
_links。 attr ( 'media' 、 'all' ) ;
地図。 updateAfterLayoutChange ( ) ;
} )
。 afterprint ( 関数 ( ) {
_links。 attr ( 'media' 、 'print' ) ;
地図。 updateAfterLayoutChange ( ) ;
} ) ;
// updateAfterLayoutChange()メソッドが作成され、マップリンクも作成されます
} ) ( ) ;


利益!

合計



これで、CSSだけでなくJavaScriptも使用して、印刷用にページの外観をカスタマイズできます。 IE8 +、Chrome、およびMozillaでテスト済み。

jQueryが1.7より古い場合、プラグインコードでon()メソッドをbind()に置き換えます。これで、プラグインはバージョン1.4.3+でサポートされるはずです。

Source: https://habr.com/ru/post/J138251/


All Articles