有没有一种方法可以追踪用户是否打印了网页?

20

有没有一种方法可以跟踪用户是否打印了网页?

谢谢, Graham


2
如果用户截屏了、使用他们的数码相机或者下载了您的整个网页并断开了网络,然后打印出来呢?你正在进行一场没有赢面的战斗。 - Kyle Butt
3
@Kyle:OP并未表达阻止用户打印的意图。他可能是在尝试追踪用户的行为以达到其他目的。 - Tahir Akhtar
@Kyle - 我的目的只是想知道用户是否打印了页面...我们希望他们这样做。 - Graham
@kyle: +1 对于无意中的幽默感。 - Robin Maben
8个回答

20

@Tahir Akhtar提出了使用打印样式表的想法。根据评论,这不起作用,因为无论浏览器当前是否处于打印视图中,样式表都会被获取。

那么我们怎么进一步处理呢?可以使用打印样式表并在其中定义一个样式,使得渲染时浏览器获取特定的资源。该资源将返回一个透明图片。

至于CSS属性的选择,background-image不能用,因为它们通常不被浏览器渲染。我的想法是使用list-style-imagecursor

我认为对于绝对定位的透明的<ul>元素,应该使用list-style-image来解决问题,而不会在视觉上改变任何东西(我不敢将元素定位在页面外面,因为可能会被浏览器优化削减掉)。每次访问该资源应该来自打印页面或打印预览。

我现在无法进行测试,也许以后可以。如果有人尝试了,请告诉我它是否有效。


看起来很有前途!绝佳的想法。+1 - Daniel Vassallo

8

在Internet Explorer 5+中,您可以使用onafterprint事件,在每次打印页面时启动一个AJAX请求。如果您正在使用jQuery,您可以执行以下操作:

window.onafterprint = function()
{
    $.post("increment_print_counter.php");
};

也许您可以使用一些统计数据来估算从其他浏览器中打印的次数!

3
这也可以与GoogleAnalytics结合使用,只需将$.post行替换为相应的GA代码部分即可。理论上,这可以更好地了解正在打印的人员及其相关情况。 :) - Amadiere

5

我不知道当你使用media="print"指定CSS时,浏览器何时会获取它们。

<link rel="stylesheet" type"text/css"
     href="print.css" media="print">

如果只有在用户尝试打印文档时才获取它,那么您可以尝试一种服务器端技巧来跟踪它。
试试看。

3
我考虑过这个问题,但我向 Fiddler 进行了检查,它显示 IE 和 Chrome 会立即获取它们。 - Daniel Vassallo
1
有趣的想法,但我想知道缓存如何与之交互。 - Benjamin Oakes
1
很酷,但不幸的是它不起作用。您可以通过Fiddler分析流量。如果您想测试,维基百科文章使用media=print样式表。 - Daniel Vassallo

3
你只能在IE浏览器中实现此功能。
IE支持两个客户端事件,你可以处理:onbeforeprintonafterprint
你可以在这两个事件中添加一个AJAX请求,调用服务器端页面来增加数据库中的PagePrinted计数器。

2

为了实现跨浏览器支持,只有当您提供控制打印的选项时,才能做到这一点。例如,添加一个“以可打印格式显示”的按钮,至少可以显示您打算打印该页面的意图。然而,您将无法通过常规方式阻止用户进行打印,也无法检测页面何时正在被打印。


1
你也可以在页面上添加一个明显的“打印”按钮,触发window.print,如果onafterprint不可用,则进行AJAX请求。
当然,它不会为您提供有关仅使用Ctrl+P(而不是IE)的用户的统计信息,但它会给您提供一些东西(如果您不介意在页面上添加一个“打印”按钮)。

1

1
  1. 使用CSS关闭打印(在body标签上不显示)
  2. 在页面上放置一个打印按钮,点击后弹出一个新的仅供打印的页面。然后您可以将该URL与用户绑定(前提是您有一些关于他们的信息)

作为用户,如果开发人员为了获取一些分析数据而在按下Ctrl-P时打印出空白页面,使我的生活变得更加困难和混乱,我会非常不满意。 - Adam

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接