2009-06-02 3 views
4

私の仕事では、人々がWebページを印刷する頻度を追跡することに興味があります。 (多くの人がそれをやっている場合は、印刷の見栄えをよくすることに重点を置いています)。誰かがWebページを印刷するときのサーバー側のログ

明らかに、ページに「印刷」ボタンを置くと、ユーザーが「ファイル」メニューを使用して「印刷」を選択するだけであれば、そのことを知る方法はありません。

印刷専用のCSSを使用して、ブラウザが印刷時にのみWebリクエストを発行するような巧妙な方法はありますか?私の実験はいいえと言われるようですが、これは可能であるように思われます。

編集:FFで動作する合理的な回答が以下に提供されています。私はIE上で動作するソリューションのために100ポイントの賞金を提供しています。

+0

はあなたが調査を検討している?=) –

答えて

3

を呼び出しますデフォルトで表示/印刷されない背景画像の問題を回避することができます。代わりに、背景画像の、箇条書きの画像を使用して...

のようなあなたのHTMLソース内の要素を挿入します。画面のCSSで

<div id="print_tracker"><ul><li>&nbsp;</li></ul></div> 

@media screen { 
    #print_tracker { display: none; } 
} 
@media print { 
    #print_tracker { display: block; } 
    #print_tracker UL { list-style-image: url(/images/printtracker.gif); } 
} 

そして、それにヒットを追跡画像。ハッキー...私は知っている

+0

優勝者!これはIE FFとSafariで動作します。それは印刷プレビューで起動し、それは受け入れられます。 –

+0

これはあなたのためにうまくいった、Dan。 –

+0

サーバー側のキャッチは良好ですが、クライアント側の方が優れているため、イベントベースの分析ソフトウェアにデータを送信できます。 私はクライアントに変更を認識させようとしてきましたが、IE以上のもので動作するものは見つかりませんでした。 オブジェクトのスタイルを変更することができれば、JSが気付くことができるものを変更することができ、それが私たちのonafterprintイベントとして機能するはずです。私はオンロードを試して、一時的にウィンドウのサイズを変える何かをして、私は 'サイズ変更'イベントを聞くことができました。それができるかどうかわからない。何か案は? – SimplGy

2

あなたは、print.cssファイルに背景イメージを追加し、その背景イメージを、ログを記録するサーバー上のファイルにリンクすることができます。例えば

:私はちょうど上記を試してみました:

body {background-image:url(http://www.example.com/printlogger.aspx);} 

私は、ただの思考

更新することが動作するかどうかはわかりません。印刷プレビューを実行するとカウンタがインクリメントされます。ただし、ページを印刷するときにカウンターを更新するときは(印刷されたバックグラウンド画像がオフになっている場合でも)はしません。もう1つのオプションは、CSSのcontentプロパティを使用することです。

UPDATE IIコンテンツのプロパティを使用することができます。Firefoxでは動作しますが、IE8では動作しません。私は他のブラウザをテストしていません:あなたの画面のCSSで

<div id="print_tracker"></div> 

body 
{ 
    content:url(http://www.example.com/Count.aspx); 
} 
+0

はそれが動作するかどうかを知っているが、間違いなく試してみる価値はいけません。画像がなければ、ブラウザが先にprint.cssファイルをダウンロードする可能性が高いようです。 – harpo

+2

ほとんどのブラウザではデフォルトで背景画像が印刷されないので、背景画像をロードするかどうかわかりません –

1

のようなHTMLソース内の要素を挿入し

#print_tracker { display: none } 

(それが本当にない限り、必要に応じていませんdivをデフォルトのスタイルにしてサイズを指定してください)

あなたの印刷用CSS:

#print_css { display: block; height: 1px; background-image: url(clear.gif); } 

次に、その画像へのヒットを追跡するだけです。

+0

ほとんどのブラウザはデフォルトで背景画像を印刷しないように設定されているため動作しません。 –

+1

あなたはこれに対するアプローチを変更することができます...あなたのスクリーンCSSに '

  • blah
'を入れ、display:noneをセットし、あなたのプリントCSSで、リストアイテム...ハッキーに使用される箇条書きを変更してください.... –

2

ページが印刷されているかどうかを確認する正確な方法はありません(プライバシー侵害と考える人もいます)。別のprint CSSを使用することをお勧めしますが、印刷プレビュー、プリフェッチ、ミラーリングツール(wgetも)は、何も印刷しない場合でもCSSファイルを要求します。

1

javascriptを使用して印刷用CSSがロードされていることを確認できます(メディアセレクタを使用して特定のレイアウトにCSSを選択できます)。 javascriptはこの要求をサーバーに記録することができます。

+0

これは技術はIE6で失敗します。それはあなたが印刷しているかどうかをメディア=印刷スタイルシートでダウンロードします。 – SpliFF

0

「印刷版」のページがあり、そのページにサーバー側のログがいくつかある可能性がありますが、関係するすべての関係者にとっては少し面倒かもしれません。ページロードで

  1. 、印刷のリンクをご利用ください」というメッセージ以外のすべてを隠しページの印刷専用のスタイルシートを追加するためにJavaScriptを使用:あなたがに何ができる他に何

    はこのようなものですこのページで "。

    • ここでjavascriptを使用すると、JSが無効のユーザーは引き続き通常の方法で印刷できます。あなたはそれらをログに記録することはできませんが、あなたはそれらを怒らせません。
  2. 、クリックされたときに、AJAXを経由してイベントをログに記録するページ上のリンクを張って、そのスタイルシートを削除し、あなたがこの方法を試すことができ、タイソンとジャオからの応答にビルドするにはwindow.print()
+1

それはひどい考えです。あなたは基本的に空のページを最初に印刷するように強制しています。 – SpliFF

+0

少なくとも彼らはかなり素早く学びます! – nickf

1

IEの場合は、ドキュメント本体の印刷関連イベントを調べる。

window.onbeforeprint - ページが印刷される直前に発生します。 window.onafterprint - 印刷するページがプリンタキュー/キャッシュにロードされた直後に発生します。

$(関数(){

//Check to see if browser supports onbeforeprint (IE6, IE7 and IE8) 
    if (window.onbeforeprint !== undefined) { 
     window.onbeforeprint = TrackPrint; 

    } 

}); function TrackPrint(){ 
$.get("http://www.example.com/Count.aspx");} 
+0

それはまた、印刷プレビューでは、 – SpliFF

関連する問題