Html 打印网页时的服务器端日志记录
在我的工作中,我们感兴趣的是跟踪人们打印网页的频率。(如果有很多人这么做,我们可能会把更多的精力放在让打印视图更好上。) 显然,如果我们在页面上放置一个“打印”按钮,我们可以在人们点击该按钮时登录,但如果用户只是使用“文件”菜单并选择“打印”,我们无法知道他们是否这样做 是否有一些聪明的方法可以使用纯打印CSS使浏览器仅在打印时发出web请求?我的实验似乎说不,但这似乎是可能的Html 打印网页时的服务器端日志记录,html,css,printing,Html,Css,Printing,在我的工作中,我们感兴趣的是跟踪人们打印网页的频率。(如果有很多人这么做,我们可能会把更多的精力放在让打印视图更好上。) 显然,如果我们在页面上放置一个“打印”按钮,我们可以在人们点击该按钮时登录,但如果用户只是使用“文件”菜单并选择“打印”,我们无法知道他们是否这样做 是否有一些聪明的方法可以使用纯打印CSS使浏览器仅在打印时发出web请求?我的实验似乎说不,但这似乎是可能的 编辑:下面提供了一个在FF中有效的合理答案;我为一个同样适用于IE的解决方案提供100分奖励。也许你可以在print.
编辑:下面提供了一个在FF中有效的合理答案;我为一个同样适用于IE的解决方案提供100分奖励。也许你可以在print.css文件中添加一个背景图像,并将该背景图像链接到你的服务器上进行日志记录的文件 例如:
body {background-image:url(http://www.example.com/printlogger.aspx);}
我不确定这是否有效,只是一个想法
更新:我刚刚尝试了上述方法。如果进行打印预览,它会增加计数器。但是,当打印页面时更新计数器时(即使打印背景图像处于关闭状态),它也不会执行此操作。另一个选项可能是使用CSS内容属性
更新II您可以使用content属性,在Firefox中工作,而不是在IE8中。我还没有测试过其他浏览器:
body
{
content:url(http://www.example.com/Count.aspx);
}
在HTML源代码中插入一个元素,如:
<div id="print_tracker"></div>
<div id="print_tracker"><ul><li> </li></ul></div>
(除非有一些默认的div样式使其具有一定的大小,否则实际上不需要这样做。)
在打印CSS中:
#print_css { display: block; height: 1px; background-image: url(clear.gif); }
然后跟踪该图像的命中。
没有准确的方法来查看页面何时被打印(并且一些人可能认为它是侵犯隐私)。使用单独的
打印CSS的建议确实有效,但它们可能会产生许多错误警报-打印预览、预取和镜像工具(甚至wget
)也会请求CSS文件,即使它们不打算打印任何内容。您可以检查打印CSS是否已加载(您可以使用媒体选择器为特定布局选择CSS)使用javascript。然后,javascript可以将此请求登录到服务器。您可以有一个“打印版本”页面,并在该页面上放置一些服务器端日志,但这可能会让所有相关方感到有点烦人
您还可以对以下内容执行其他操作:
在页面加载时,使用javascript在页面上添加一个仅打印的样式表,该样式表将隐藏除“请使用此页面上的打印链接”消息之外的所有内容。
- 在这里使用javascript,这样禁用JS的用户仍然可以正常打印。您将无法记录他们,但也不会激怒他们
在页面上放置一个链接,单击该链接时,通过AJAX记录事件,删除该样式表,然后调用window.print()
要基于Tyson和Jao的回复,您可以尝试这种方法来解决默认情况下不显示/打印背景图像的问题。使用项目符号图像代替背景图像
在HTML源代码中插入一个元素,如:
<div id="print_tracker"></div>
<div id="print_tracker"><ul><li> </li></ul></div>
然后跟踪对该图像的点击。Hacky…我知道对于IE,探索使用文档正文中与打印相关的事件
window.onbeforeprint-在打印页面之前激发
window.onafterprint-将要打印的页面加载到打印机队列/缓存后立即激发
$(函数(){
不知道这是否有效,但绝对值得一试。如果没有图像,浏览器很可能会抢先下载print.css文件。大多数浏览器默认情况下不会打印背景图像,因此我不确定他们是否会加载背景图像您考虑过调查吗?=)这似乎不起作用,尤其是因为大多数浏览器在默认情况下都配置为不打印背景图像。您可以修改此方法…在屏幕css中放置- 之类的内容,设置display:none,并在打印css中更改列表项上使用的项目符号…hacky…此技术在IE6中失败。无论你是否打印,它都会下载media=print样式表。这是个糟糕的主意。你基本上是强迫他们先打印一个空白页。赢家!这在IE FF和Safari上有效。打印预览时它会启动,这是可以接受的。服务器端捕获效果不错,但客户端更好,因此我们可以将数据发送到基于事件的analytics软件。我一直在试图让客户端注意到一个变化,但没有发现任何比IE更有效的东西。似乎如果我们可以改变一个对象的样式,我们应该能够改变JS可能注意到的东西,这可以作为我们的“onafterprint”事件。我尝试了一个onload,并做了一些可以改变的事情暂时更改窗口大小,以便我可以收听“调整大小”事件。到目前为止,没有骰子。不确定是否可以完成。有什么想法吗?
//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");}