2009-06-02 80 views
4

在我的工作中,我们有兴趣跟踪人们打印网页的频率。 (如果有很多人这样做,我们可能会更加关注使打印视图更好。)有人打印网页时的服务器端日志记录

显然,如果我们在页面上放置“打印”按钮,我们可以记录人们何时点击,但如果用户只是使用“文件”菜单并选择“打印”,我们无法知道他们是否这样做。

有没有一些聪明的方法来使用只打印CSS来使浏览器只在打印时发出Web请求?我的实验似乎说不,但这似乎应该是可能的。

编辑:下面提供了一个合理的答案,在FF中工作;我为在IE上运行的解决方案提供100点奖励。

+0

你有没有考虑一个调查?=) – 2009-06-02 17:51:10

回答

3

要建立从泰森和饶宗颐回复,你可以试试这个方法解决默认情况下不显示/打印背景图像的问题。而不是背景图片,使用子弹图片...

插入元素在你的HTML源代码,如:

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

在屏幕CSS:

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

然后跟踪命中到图片。 Hacky ...我知道

2

也许你可以在print.css文件中添加一个背景图片,并将该背景图片链接到服务器上的一个文件中,该文件进行日志记录。

例如:

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

我不知道是否可行,只是一个想法

更新:我只是尝试以上。如果您进行打印预览,它会增加计数器。但是,当打印页面时更新计数器时(即使打印背景图像关闭)也不会。另一种选择可能是使用CSS内容属性。

UPDATE II您可以使用内容属性,在Firefox中工作,不在IE8中。我没有测试过其他浏览器:

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

在屏幕CSS:

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

不知道是不是这样的作品,但绝对值得一试。没有这个图像,浏览器很可能会抢先下载print.css文件。 – harpo 2009-06-02 16:59:36

+2

默认情况下,大多数浏览器不打印背景图像,所以我不确定它们是否会加载背景图像 – 2009-06-02 17:00:13

1

在你的HTML源代码一样插入元素

#print_tracker { display: none } 

(这是不是真的需要,除非你有一些div的默认样式,导致它有一个尺寸。)

在您的打印CSS:

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

然后只是追踪该图像的命中。

+0

这似乎不起作用,这不仅仅是因为大多数浏览器都配置为默认不打印背景图像。 – 2009-06-04 01:04:59

+1

你可以修改这个方法......在你的屏幕上放置一个`

  • blah
`css,设置display:none,并在你的打印css中,更改列表项上使用的子弹... hacky .... – 2009-06-10 01:15:11

2

没有准确的方法来查看打印页面的时间(有些人可能会认为它是隐私入侵)。关于单独使用print CSS的建议可行,但它们可能会产生大量虚假警报 - 打印预览,预取和镜像工具(即使wget)也会请求CSS文件,即使它们不打印任何内容。

1

您可以使用javascript检查您的打印CSS是否已加载(您可以使用媒体选择器为特定布局选择CSS)。然后,JavaScript可以将此请求记录到服务器。

+0

This技术与IE6失败。它下载媒体=打印样式表是否正在打印或不打印。 – SpliFF 2009-06-10 01:13:53

0

你可以有一个“打印版本”页面,并在该页面上放置一些服务器端日志记录,但这可能会让所有相关方感到有点烦恼。

你可以做别的什么是这样的:

  1. 在页面加载,使用JavaScript其中隐藏除了一个消息,说一切“的页面上添加一个唯一的打印样式表请使用打印链接在本页”。
    • 在此处使用javascript,以便禁用JS的用户仍然可以照常打印。你将无法登录它们,但是你也不会将它们排除在外。
  2. 放,点击后,通过AJAX记录该事件的页面上的链接,删除该样式,然后调用window.print()
+1

这是一个可怕的想法。你基本上迫使他们先打印一个空白页面。 – SpliFF 2009-06-10 01:48:31

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");} 
相关问题