2010年7月9日金曜日

印刷&印刷プレビューでJavaScript

IEに限って、onbeforeprintとonafterprintイベントが使える。

たとえば

flashなどのobjectを含むhtmlを印刷した場合にレイアウトが乱れることがあるので、印刷前にhtmlからobjectを削除して解決(代替画像に差し替える、といったこともできると思う)。

    // このコードはjQueryに依存します

    // object要素を除去した印刷用html
    //(dhtml的に変化するページなので初めに印刷用htmlを記録しておく)
    var htmlStripped = $('body').html().replace(/<object.*<\/object>|<script.*<\/script>/ig, '');

    // 関数定義
    function fbef(){
      // 印刷するにあたって、記録しておいた印刷用htmlを復活
      $('body').html(htmlStripped);
    };
    function faft(){
      // キャッシュからリロード(これが無いと、
      // サーバーからリロードしたhtmlが印刷されて
      // しまって"fbef"の処理が無意味になる)
      location.reload(false);
    };

    // イベントハンドラを設定
    window.onbeforeprint = fbef;
    window.onafterprint  = faft;

0 件のコメント:

コメントを投稿