在我的工作中,我们有兴趣跟踪人们打印网页的频率。 (如果有很多人这样做,我们可能会更加关注使打印视图更好。)有人打印网页时的服务器端日志记录
显然,如果我们在页面上放置“打印”按钮,我们可以记录人们何时点击,但如果用户只是使用“文件”菜单并选择“打印”,我们无法知道他们是否这样做。
有没有一些聪明的方法来使用只打印CSS来使浏览器只在打印时发出Web请求?我的实验似乎说不,但这似乎应该是可能的。
编辑:下面提供了一个合理的答案,在FF中工作;我为在IE上运行的解决方案提供100点奖励。
在我的工作中,我们有兴趣跟踪人们打印网页的频率。 (如果有很多人这样做,我们可能会更加关注使打印视图更好。)有人打印网页时的服务器端日志记录
显然,如果我们在页面上放置“打印”按钮,我们可以记录人们何时点击,但如果用户只是使用“文件”菜单并选择“打印”,我们无法知道他们是否这样做。
有没有一些聪明的方法来使用只打印CSS来使浏览器只在打印时发出Web请求?我的实验似乎说不,但这似乎应该是可能的。
编辑:下面提供了一个合理的答案,在FF中工作;我为在IE上运行的解决方案提供100点奖励。
要建立从泰森和饶宗颐回复,你可以试试这个方法解决默认情况下不显示/打印背景图像的问题。而不是背景图片,使用子弹图片...
插入元素在你的HTML源代码,如:
<div id="print_tracker"><ul><li> </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 ...我知道
也许你可以在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);
}
不知道是不是这样的作品,但绝对值得一试。没有这个图像,浏览器很可能会抢先下载print.css文件。 – harpo 2009-06-02 16:59:36
默认情况下,大多数浏览器不打印背景图像,所以我不确定它们是否会加载背景图像 – 2009-06-02 17:00:13
在你的HTML源代码一样插入元素
#print_tracker { display: none }
(这是不是真的需要,除非你有一些div的默认样式,导致它有一个尺寸。)
在您的打印CSS:
#print_css { display: block; height: 1px; background-image: url(clear.gif); }
然后只是追踪该图像的命中。
这似乎不起作用,这不仅仅是因为大多数浏览器都配置为默认不打印背景图像。 – 2009-06-04 01:04:59
你可以修改这个方法......在你的屏幕上放置一个`
没有准确的方法来查看打印页面的时间(有些人可能会认为它是隐私入侵)。关于单独使用print
CSS的建议可行,但它们可能会产生大量虚假警报 - 打印预览,预取和镜像工具(即使wget
)也会请求CSS文件,即使它们不打印任何内容。
您可以使用javascript检查您的打印CSS是否已加载(您可以使用媒体选择器为特定布局选择CSS)。然后,JavaScript可以将此请求记录到服务器。
This技术与IE6失败。它下载媒体=打印样式表是否正在打印或不打印。 – SpliFF 2009-06-10 01:13:53
你可以有一个“打印版本”页面,并在该页面上放置一些服务器端日志记录,但这可能会让所有相关方感到有点烦恼。
你可以做别的什么是这样的:
window.print()
这是一个可怕的想法。你基本上迫使他们先打印一个空白页面。 – SpliFF 2009-06-10 01:48:31
对于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");}
你有没有考虑一个调查?=) – 2009-06-02 17:51:10