有没有办法跟踪用户是否打印网页?

时间:2010-01-27 15:32:27

标签: javascript html browser printing

有没有办法跟踪用户是否打印网页?

谢谢, 格雷厄姆

8 个答案:

答案 0 :(得分:19)

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

如何更进一步:使用打印样式表并在其中定义一个样式,使浏览器在呈现时获取某个资源。资源将返回透明图像。

至于CSS属性的选择,background-image已经出局,因为它们通常不会被浏览器呈现。我的想法是list-style-imagecursor

我认为list-style-image在一个绝对定位的透明<ul>上可能会在没有视觉上改变任何东西的情况下做到这一点(我不敢将元素放在页面之外,因为可能的浏览器优化会将其切掉) 。每次访问该资源应该来自打印页面或打印预览。

我现在无法测试,也许以后测试。如果有人试过,我有兴趣听听它是否有效。

答案 1 :(得分:7)

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

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

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

答案 2 :(得分:5)

我不知道当您使用media =“print”

指定浏览器时,浏览器何时会获取CSS
<link rel="stylesheet" type"text/css"
     href="print.css" media="print">

如果他们仅在用户尝试打印文档时才获取它,那么您可能会尝试使用服务器端技巧来跟踪它。

试一试。

答案 3 :(得分:3)

您只能在IE中实现此目的。

IE支持您可以处理的两个客户端事件:onbeforeprintonafterprint

您可以在任何一个将调用页面服务器端的事件中添加一个AJAX请求,例如,增加数据库中的PagePrinted计数器。

答案 4 :(得分:2)

对于跨浏览器支持,仅当您提供控制打印时,例如,添加“以可打印格式显示”按钮,该按钮至少会显示打印页面的意图。但是,您将无法通过常规方式阻止用户打印或检测打印页面的时间。

答案 5 :(得分:1)

您还可以向页面添加一个明显的“打印”按钮,该按钮会触发window.print,并在onafterprint不可用时执行AJAX请求。

当然,它不会给你任何关于只是按Ctrl + P(并且不在IE上)的用户的统计数据,但它会给你一些东西(如果你不介意坚持使用“打印”按钮)在页面上。)

答案 6 :(得分:1)

  1. 使用CSS关闭打印(身体标签上没有显示)
  2. 页面上有一个打印按钮,弹出一个新的仅打印页面。然后,您可以将该URL与用户绑定(前提是您有一些信息)

答案 7 :(得分:1)

是的,对于大多数浏览器,都有可用于跟踪打印请求的事件。

  • IE5 +支持window.onbeforeprintwindow.onafterprint
  • Chrome9 +和Safari5.1 +支持window.matchMedia()

有关详细信息,请参阅TJ VanToll's "Detecting Print Requests with JavaScript" blog post