60

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

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

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

4

11 回答 11

53

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

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

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

    }); }); 
</script>

但是,您隐藏身体,但已经“打印”到剪贴板。您可以触发另一个将一些文本复制到剪贴板的事件,正如您在此答案“Edit as of 2016”中看到的那样,使用 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();
});

这是工作示例:

在这里我尝试使窗口失焦,在失焦时我隐藏内容并显示模态

于 2016-06-03T00:23:00.580 回答
46

这是不可能的。

于 2010-06-28T08:31:06.133 回答
39

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

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

尤其是后者可能会引起人们的兴趣,因为 Internet Explorer 还有一个权限管理插件

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

于 2010-06-28T13:08:55.743 回答
16

值得庆幸的是,这个离谱的想法不可能可靠地实现,“禁用屏幕抓取”部分和“禁用用户的 Firefox 扩展”部分都不是。即使是这样,正如@kbok 在上面的评论中指出的那样,您也无权这样做。

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

于 2010-06-28T08:41:16.383 回答
14

试试这个

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

希望它有效

于 2010-06-28T08:36:31.037 回答
6

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

于 2010-06-29T05:20:04.810 回答
4

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

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

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

于 2010-06-28T08:44:28.530 回答
4

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

这个想法是这样的:

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

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

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

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

  5. 截图工具和其他类似的浏览器扩展和附加组件将毫无用处。除了我发现的一种称为全页屏幕捕获的工具

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

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

我将在我的博客中更新这篇文章,了解我已经使用/将用于更多保护的其他技术。请查看此测验(仍在开发中)以获取演示。

于 2014-10-20T18:26:36.467 回答
4

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

<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');
      };
    });
});
于 2015-12-07T12:38:36.407 回答
2

为什么要阻止打印屏幕?

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

我想就差不多了。

于 2010-06-28T08:58:26.327 回答
1

这是另一个解决方案:

<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();,并可能在一秒钟后将它们显示回来。

缺点是如果网页不是活动窗口,它将不起作用。

于 2011-09-20T19:54:51.750 回答