【问题标题】:Stop User from using "Print Scrn" / "Printscreen" key of the Keyboard for any Web Page阻止用户对任何网页使用键盘的“打印屏幕”/“打印屏幕”键
【发布时间】:2011-03-09 01:00:21
【问题描述】:

我目前正在做一个项目,我需要阻止用户拍摄任何网页的快照,为此他可以使用任何普通键盘中可用的“Print Scrn”/“Printscreen”键。

我一直在努力寻找解决方案,但徒劳无功。如果可能的话,我需要考虑到 Firefox 浏览器的“Screengrab”插件,同时停止它。

非常感谢任何帮助,我正在为我的项目使用 PHP(作为服务器端语言)和 jQuery。

【问题讨论】:

  • 你还需要考虑,至少,Cmd+Alt+3, Cmd+Alt+4, Cmd+Alt+Shift+3, Cmd+Alt+Shift+4, Grab.app 、WebSnapper、SnapsPro、不起眼的“打印”对话框和无数其他适用于 Mac 用户的工具。我们甚至不要开始使用所有其他 Windows 和 Linux 截屏方式。
  • 好的,我很抱歉提出这么愚蠢的问题。 但是我不能问任何我根本不知道的问题吗?
  • 无论请求的可行性如何,这都是一个完全合法的问题。我们都面临着充其量是可疑的要求。回答诸如此类的问题有助于解释为什么这些要求不能也不应该被实施。
  • 否决这个问题是错误的做法。这个问题很好,很多非网民问类似的问题(另见弹出/下)显然答案是“不要,你也不能”但是惩罚 OP 对任何人都没有任何好处。
  • 哇,这个问题的投票结果真好!是不是大家都跟着最新评论的心情走? (为了记录,我没有投任何票,这正是我对这个问题的感受。)

标签: javascript html webpage-screenshot


【解决方案1】:

我讨厌“不可能”这句话。以下是为您提供帮助的所有解决方案:

1- 您可以从 Haluk 获取解决方案:

<script type="text/javascript"> $(document).ready(function() {
    $(window).keyup(function(e){
      if(e.keyCode == 44){
        $("body").hide();
      }

    }); }); 
</script>

但是,您隐藏了正文,但已“打印”到剪贴板。您可以触发另一个将一些文本复制到剪贴板的事件,正如您在此答案“Edit as of 2016”Click button copy to clipboard using jQuery 中看到的那样,它是这样的:

function copyToClipboard() {
  // Create a "hidden" input
  var aux = document.createElement("input");
  // Assign it the value of the specified element
  aux.setAttribute("value", "Você não pode mais dar printscreen. Isto faz parte da nova medida de segurança do sistema.");
  // Append it to the body
  document.body.appendChild(aux);
  // Highlight its content
  aux.select();
  // Copy the highlighted text
  document.execCommand("copy");
  // Remove it from the body
  document.body.removeChild(aux);
  alert("Print screen desabilitado.");
}

$(window).keyup(function(e){
  if(e.keyCode == 44){
    copyToClipboard();
  }
}); 

这将阻止您的部分问题。如果用户关注此窗口之外的另一个对象,他将能够截取屏幕截图。 **但也有另一种解决方案,当窗口不聚焦时,只需禁用孔体。完整的解决方案,来自您亲爱的巴西朋友:

function copyToClipboard() {
  // Create a "hidden" input
  var aux = document.createElement("input");
  // Assign it the value of the specified element
  aux.setAttribute("value", "Você não pode mais dar printscreen. Isto faz parte da nova medida de segurança do sistema.");
  // Append it to the body
  document.body.appendChild(aux);
  // Highlight its content
  aux.select();
  // Copy the highlighted text
  document.execCommand("copy");
  // Remove it from the body
  document.body.removeChild(aux);
  alert("Print screen desabilitado.");
}

$(window).keyup(function(e){
  if(e.keyCode == 44){
    copyToClipboard();
  }
}); 

$(window).focus(function() {
  $("body").show();
}).blur(function() {
  $("body").hide();
});

下面是例子:

【讨论】:

  • 几个月前我用我的另一个 Facebook 帐户发布了这个帖子。无论如何要将此答案更改为我当前的 Facebook 帐户?
  • 很酷的解决方案。谢谢。但它仍然有一些缺陷:组合Win + Print屏幕。当然,没有人可以仅仅通过相机来阻止截图:)
  • 在 Windows 10 IE 11 中,我收到一条警报,提示“您要允许此网页访问您的剪贴板吗?...”。这对我们的客户来说是不可接受的。所以我们似乎没有办法做到这一点。
  • 多年来我一直在说开发人员应该阻止 IE。 IE 一直是我们的噩梦,也是多年来支撑互联网发展的链条。但这里有一个部分解决方案:显示用户应该允许复制/粘贴的消息,并显示带有符号的巨大文本,他必须在文本框中复制和粘贴。并向用户推荐其他浏览器以避免并发症。我是不是走得太远了?
  • 我会建议使用“鼠标悬停”而不是焦点。 $(window).mouseover(function () { $("body").show(); }).mouseout(function () { $("body").hide(); });
【解决方案2】:

这是不可能的。

【讨论】:

  • 如果是的话,它会很快被规避。
  • “打印屏幕”键是操作系统功能,您绝对无权从网页更改其行为。这就像在硬盘上安装软件一样。一般来说,没有真正的方法可以阻止用户下载网站的内容。你可以让它变得更难一点,但这只是时间问题。
  • 一般来说:在某些时候数据必须显示给用户。那时,任何确定的用户都可以捕获它。如果不出意外,有些设备将位于您的 PC 和显示器之间,与 PC 完全分离并记录发送到显示器的任何内容。
  • @JSmaga 这将是有史以来用途最单一的操作系统:“功能:无法截屏!”;D
  • 即使操作系统没有截图功能,您仍然可以将屏幕放在扫描仪上或拍照:p
【解决方案3】:

您无法从 Web 浏览器禁用屏幕抓取,只能通过在用户的 PC 上安装其他软件来实现。

有一些可用的 IRM(信息权限管理)工具可以做到这一点,例如通过保护 Windows/DirectX API 调用并监控视频内存,例如 Oracle IRMMicrosoft's IRM technology

尤其是后者可能很有趣,因为还有一个Rights Management Add-on for Internet Explorer

但正如其他人已经说过的,任何 IRM/DRM 技术都存在争议,您应该了解它通常会限制或惹恼您的用户。

【讨论】:

  • 我不会说 IRM 是一个“争议”。在互联网上考虑它是愚蠢的,但在企业环境中它是有道理的。公司在每台计算机上都安装了 IRM,这是有充分理由的。它向员工发出了明确的信息:“此数据是敏感的”。如果复制数据并非易事,员工就不会再尝试了。
  • @Chris - “永远不要将愚蠢充分解释为恶意”。但是,如果敌对员工可以看到它,她就可以窃取它,IRM 在限制数据和防止无意数据泄漏方面非常有效,并且是标记敏感文档的好方法。
  • 感谢您明确说明完成此目标的用户对用户的敌意和反响如何。
  • netflix 是如何做到这一点的..没有截图没有打印屏幕记录屏幕共享使用像 skype 这样的应用程序..一切都在那里如何
【解决方案4】:

谢天谢地,这个离谱的想法不可能可靠地实现,无论是“禁用屏幕抓取”部分还是“禁用用户的 Firefox 扩展”部分。即使是这样,正如@kbok 在上面的评论中指出的那样,你没有权利 这样做。

保护您的在线内容的唯一方法是版权法 - 提及这些通常足以吓跑人们避免滥用它! - 或者根本不显示。

【讨论】:

  • 经常提到版权法就够了???谁说的?全球数百万人窃取他人拥有版权的媒体。美国的保护在海外是不够的。这是一项联邦犯罪,处罚严厉,包括六位数的巨额罚款和数年监禁。这不是一个离谱的想法。只是来自试图帮助保护他或他的客户拥有的媒体的新开发人员。在保护方面,您有权对您的网站做任何您想做的事情。用户体验可能会发挥作用。不是每个人都能承担起因侵犯版权而提起的诉讼。即使他们能赢,也需要时间和金钱。
  • 几家大型科技公司(我不愿透露姓名)窃取了专利创意并将专利锁在法庭上多年,并花费数百万美元进行斗争,直到小家伙不得不离开他的奖品。
【解决方案5】:

试试这个

$(document).keyup(function(e){
  if(e.keyCode == 44) return false;
});

希望有效果

【讨论】:

  • 这很快就崩溃了:只需关注另一个窗口,然后截屏。
  • 正如我在下面所说的,相当确定在屏幕已经“打印”之后触发了 keyup 事件......
  • @MatthewScharley 他可以避免使用这个代码: $(window).focus(function() { $(".content").show(); }).blur(function() { $ (".content").hide(); alert('nonono,没有甜甜圈给你!'); });
【解决方案6】:

您可以使用 JavaScript 或 Flash 更改剪贴板的内容。这已经有点帮助了。

【讨论】:

    【解决方案7】:

    就像@Sjoerd 所说,这是不可能的。

    如果是要保护的图片,我建议您例如显示带有水印的低质量图像,并仅在适当的时候显示无水印的高质量图像。

    但是是的...如果您希望它们无法复制...请不要将它们放到网上。

    【讨论】:

    • 我不喜欢“不可能”这个词……在宇宙中的所有事物中,我不会说“不可能”。我认为不可行这个词更适合。也许我很迂腐,但我只是不喜欢我们,作为人类,卖空自己。如果他们真的愿意,有人可以做到。因此……完全有可能。
    • 虽然不喜欢,但也有很多不可能的事情。这就是其中之一。
    • 是的,你到底要怎么做到这一点?如果它在屏幕上,那你就无能为力了。例如,您将如何防止有人拿相机拍摄屏幕照片?
    • 这是“不可能的”...如果可以查看,可以以某种方式复制。
    【解决方案8】:

    没有直接的方法可以做到这一点,但是,有一种方法可以尽可能保护您的内容免受 prnt scrn 的影响。

    想法是这样的:

    1. 如果禁用 java 则使您的内容无法访问,并使用诸如 Artist Scope 的复制保护之类的脚本。

    2. 检测到 prnt scrn 将向管理员发送一条带有注册用户信息的消息,这意味着只有会员才能访问的受限内容可以从中受益。发送 IP 地址听起来是个好主意,但禁止 IP 不是,因此您不会从中获得很多好处。

    3. 一旦在您网站的窗口之外,您的内容将被覆盖,除非您返回您的网站并激活它,否则您的内容将无法移除,这将重新激活本文中提到的 prnt scrn 检测代码上一点。

    4. 如果设备是移动设备,您可以隐藏图像,或者像我一样,重定向到“我们很抱歉”页面。

    5. 截图工具和其他类似的浏览器扩展和插件将毫无用处。除了我发现的一个名为full page screen capture

      的工具
      • 此工具会在按下按钮约 3 秒后捕获 Web 内容,这足以消除覆盖并返回您的内容
      • 一个好的转变是在单击“关闭覆盖”时启动一个计数器,这需要 5 秒或更长时间,即。在此扩展程序已拍摄快照之后
    6. 还有一种间接的方法可以防止视频捕获,还在研究中,会在这里或我的博客中发布。

    7. 如果您的内容真的那么值得,用户可能仍然使用他们的相机捕捉它,也可能有一种方法!但在谈论它之前我还需要做一些研究。

    我将在我的博客中更新this post,以了解我已经使用/将用于更多保护的其他技术。 请查看this quiz(仍在开发中)查看演示。

    【讨论】:

      【解决方案9】:

      当用户单击键打印屏幕时,您可以将其他内容复制到剪贴板。这是示例,我复制了用户文本。

      <p id="test">test</p>
      
      function copyToClipboard(elementId) {
      
        // Create a "hidden" input
        var aux = document.createElement("input");
      
        // Assign it the value of the specified element
        aux.setAttribute("value", document.getElementById(elementId).innerHTML);
      
        // Append it to the body
        document.body.appendChild(aux);
      
        // Highlight its content
        aux.select();
      
        // Copy the highlighted text
        document.execCommand("copy");
      
        // Remove it from the body
        document.body.removeChild(aux);
      
      }
      $(document).ready(function(){
          $(window).keyup(function(e){
            if(e.keyCode == 44){
              copyToClipboard('test');
            };
          });
      });
      

      【讨论】:

      • 它甚至没有到达 $(window).keyup(function(e){ part
      【解决方案10】:

      为什么要阻止打印屏幕?

      如果您想保护一些照片,您可能希望将其设置为低分辨率,并以编程方式在 php 中包含某种版权标志。

      我觉得差不多了。

      【讨论】:

        【解决方案11】:

        这是另一个解决方案:

        <script type="text/javascript"> $(document).ready(function() {
            $(window).keyup(function(e){
              if(e.keyCode == 44){
                $("body").hide();
              }
        
            }); }); </script>
        

        这类似于@ZX12R 的解决方案。好处是即使打印屏幕捕捉软件是第 3 方工具(例如 snagIt),此代码也可以工作。

        您可以将$("body").hide(); 替换为更适合您的内容。例如,您可以隐藏所有图片 $("img").hide(); 并可能在一秒钟后将它们显示回来。

        缺点是如果网页不是活动窗口,它将无法工作。

        【讨论】:

        • 我很确定在 keyup 事件触发之前“打印筛选”已经发生...
        • 也可以使用截图工具或类似工具,或者在没有激活窗口的情况下按打印屏幕键,网页甚至不会得到事件。
        • 不幸的是,这在 OS X 上不起作用,因为组合键完全不同。
        猜你喜欢
        • 2015-03-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-10-01
        • 2015-11-20
        • 1970-01-01
        • 2020-06-11
        相关资源
        最近更新 更多