Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Html 打印网页时的服务器端日志记录_Html_Css_Printing - Fatal编程技术网

Html 打印网页时的服务器端日志记录

Html 打印网页时的服务器端日志记录,html,css,printing,Html,Css,Printing,在我的工作中,我们感兴趣的是跟踪人们打印网页的频率。(如果有很多人这么做,我们可能会把更多的精力放在让打印视图更好上。) 显然,如果我们在页面上放置一个“打印”按钮,我们可以在人们点击该按钮时登录,但如果用户只是使用“文件”菜单并选择“打印”,我们无法知道他们是否这样做 是否有一些聪明的方法可以使用纯打印CSS使浏览器仅在打印时发出web请求?我的实验似乎说不,但这似乎是可能的 编辑:下面提供了一个在FF中有效的合理答案;我为一个同样适用于IE的解决方案提供100分奖励。也许你可以在print.

在我的工作中,我们感兴趣的是跟踪人们打印网页的频率。(如果有很多人这么做,我们可能会把更多的精力放在让打印视图更好上。)

显然,如果我们在页面上放置一个“打印”按钮,我们可以在人们点击该按钮时登录,但如果用户只是使用“文件”菜单并选择“打印”,我们无法知道他们是否这样做

是否有一些聪明的方法可以使用纯打印CSS使浏览器仅在打印时发出web请求?我的实验似乎说不,但这似乎是可能的


编辑:下面提供了一个在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>&nbsp;</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>&nbsp;</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");}