有没有办法跟踪用户是否打印网页?
谢谢, 格雷厄姆
答案 0 :(得分:19)
@Tahir Akhtar有使用打印样式表的想法。根据评论,这不起作用,因为始终提取样式表,无论浏览器当前是否处于打印视图中。
如何更进一步:使用打印样式表并在其中定义一个样式,使浏览器在呈现时获取某个资源。资源将返回透明图像。
至于CSS属性的选择,background-image
已经出局,因为它们通常不会被浏览器呈现。我的想法是list-style-image
或cursor
。
我认为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支持您可以处理的两个客户端事件:onbeforeprint
和onafterprint
。
您可以在任何一个将调用页面服务器端的事件中添加一个AJAX请求,例如,增加数据库中的PagePrinted计数器。
答案 4 :(得分:2)
对于跨浏览器支持,仅当您提供控制打印时,例如,添加“以可打印格式显示”按钮,该按钮至少会显示打印页面的意图。但是,您将无法通过常规方式阻止用户打印或检测打印页面的时间。
答案 5 :(得分:1)
您还可以向页面添加一个明显的“打印”按钮,该按钮会触发window.print
,并在onafterprint
不可用时执行AJAX请求。
当然,它不会给你任何关于只是按Ctrl + P(并且不在IE上)的用户的统计数据,但它会给你一些东西(如果你不介意坚持使用“打印”按钮)在页面上。)
答案 6 :(得分:1)
答案 7 :(得分:1)
是的,对于大多数浏览器,都有可用于跟踪打印请求的事件。
window.onbeforeprint
和window.onafterprint
window.matchMedia()
有关详细信息,请参阅TJ VanToll's "Detecting Print Requests with JavaScript" blog post。