Запретить пользователю использовать клавишу Print Scrn / Printscreen на клавиатуре для любой веб-страницы

В настоящее время я работаю над проектом, в котором мне нужно запретить пользователю делать снимок любой веб-страницы, для чего он может использовать клавишу «Print Scrn» / «Printscreen», доступную на любой из обычных клавиатур.

Я пытался найти его решение, но тщетно. Если возможно, мне нужно принять во внимание надстройку «Screengrab» браузера Firefox, остановив ее также.

Любая помощь приветствуется, и я использую PHP (как серверный язык) и jQuery для своего проекта.


person Knowledge Craving    schedule 28.06.2010    source источник
comment
Также нужно учитывать, по крайней мере, Cmd + Alt + 3, Cmd + Alt + 4, Cmd + Alt + Shift + 3, Cmd + Alt + Shift + 4, Grab.app, WebSnapper, SnapsPro, скромную печать диалог и множество других инструментов для пользователей Mac. И давайте даже не будем начинать со всех остальных способов делать снимки экрана в Windows и Linux.   -  person deceze♦    schedule 28.06.2010
comment
Хорошо, прошу прощения за такой глупый вопрос. Но разве я не могу задать такой вопрос, о котором вообще не знал?   -  person Knowledge Craving    schedule 28.06.2010
comment
Это вполне законный вопрос вне зависимости от выполнимости запроса. Мы все сталкивались с требованиями, которые в лучшем случае сомнительны. Ответы на подобные вопросы помогают объяснить, почему такие требования не могут и не должны выполняться.   -  person etc    schedule 28.06.2010
comment
Спасибо за поддержку, так как этот вопрос просто показал мне, какой грех я совершил, задав здесь!   -  person Knowledge Craving    schedule 28.06.2010
comment
Голосование против этого вопроса - неправильный поступок. Вопрос в порядке, и многие люди, не являющиеся веб-пользователями, задают похожие вопросы (см. Также всплывающие / подменю). Ясно, что ответ - нет, и вы все равно не можете, однако наказание OP никому не приносит никакой пользы.   -  person Loofer    schedule 28.06.2010
comment
Вау, какой размах голосования по этому вопросу! Все просто следят за настроением последнего комментария? (Для протокола, я не голосовал ни за что, что точно выражает мое отношение к этому вопросу.)   -  person deceze♦    schedule 29.06.2010
comment
В последний раз, когда такие идиотские сайты случались на моем пути, и мне нужно было что-то распечатать (и сюрприз! Кнопка печати тоже была отключена!), Я запустил проклятый сайт на виртуальной машине и взял с него копию. В результате я смог обсудить результаты с группой людей, которым нужно было посмотреть распечатку, а не собираться группой вокруг моего компьютера, который, благодаря рассматриваемому веб-сайту, обрабатывал каждый щелчок так очень медленно. Печать сэкономила часы моего времени. (И прежде чем вы спросите ... Да, это было совершенно законно).   -  person Arafangion    schedule 29.06.2010
comment
Возможно, это потому, что раньше этот вопрос задавали 935835 раз ...   -  person NibblyPig    schedule 29.06.2010
comment
Хороший вопрос. Я прошу прощения от имени тех, кто пытается согнать вас сено. Вопрос хороший. Это невозможно сделать на 100%, и это может стоить вам с точки зрения UX. Я до сих пор восхищаюсь этим вопросом, потому что когда-то хотел это знать. Я восхищаюсь им еще и потому, что смотрю на тонны идей, которые выплескиваются из голов очень талантливых разработчиков. Понятия не имею, почему некоторые опытные разработчики могут быть такими суровыми по отношению к новым парням. Сайт был разработан, чтобы учиться и развиваться, но некоторые заставляют людей убегать, прежде чем они начнут действовать. Грустный. Спасибо за вопрос! Мне понравились идеи, которые он выдвинул. Добавленная стоимость SO   -  person DavidG    schedule 12.04.2020


Ответы (11)


Вы не можете отключить захват экрана из веб-браузера, это возможно только путем установки дополнительного программного обеспечения на ПК пользователя.

Для этого доступны некоторые инструменты IRM (управления правами на доступ к данным), например путем защиты вызовов Windows / DirectX API, а также мониторинга видеопамяти, например Oracle IRM или например, IRM от Microsoft.

Последнее может представлять особый интерес, поскольку существует также Надстройка управления правами для Internet Explorer.

Но, как уже было сказано, любая технология IRM / DRM вызывает споры, и вы должны понимать, что чаще всего она ограничивает или раздражает ваших пользователей.

person Dirk Vollmar    schedule 28.06.2010
comment
Я бы не сказал, что IRM - это спор. В Интернете глупо даже рассматривать это, но в корпоративной среде это имеет смысл. Компании устанавливают IRM на каждый компьютер, и на то есть веские причины. Он ясно дает понять сотрудникам: эти данные конфиденциальны. Если скопировать данные нетривиально, сотрудник не стал бы пытаться дальше. - person Kobi; 29.06.2010
comment
@Chris - Никогда не приписывайте злому умыслу то, что адекватно объясняется глупостью. Однако, если враждебно настроенный сотрудник видит его, он может украсть его, однако IRM очень эффективно ограничивает данные и предотвращает непреднамеренную утечку данных и является хорошим способом пометки конфиденциальных документов. - person Kobi; 09.07.2010
comment
Спасибо, что разъяснили, насколько враждебно настроенным и плохо воспринятым пользователем будет что-то для выполнения этой задачи. - person seagull; 15.03.2016
comment
как netflix это делает .. без скрэншота нет скрэншэна запись скриншота с помощью приложения вроде скайпа .. там все испортилось как - person rahul cp; 23.05.2020

Я ненавижу фразу «это невозможно». Вот все решения, вместе взятые, чтобы помочь вам:

1- Раствор можно взять у Халука:

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

    }); }); 
</script>

ОДНАКО, вы скрываете тело, но оно уже "напечатано" в буфере обмена. Вы можете запустить другое событие, копирующее текст в буфер обмена, как вы можете видеть в этом ответе «Изменить с 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();
});

Вот пример работы:

Здесь я пытаюсь расфокусировать окно, при расфокусировке я скрываю контент и показываю модальное окно

person Marcelo Rocha    schedule 03.06.2016
comment
Я опубликовал это несколько месяцев назад со своей другой учетной записью в Facebook. В любом случае, чтобы изменить этот ответ на мою текущую учетную запись Facebook? - person Marcelo Agimóvel; 10.03.2017
comment
Классный раствор. Спасибо. Но есть еще несколько недостатков: комбинация Win + Print screen. И конечно, никто не мог запретить снимать скриншоты просто камерой :) - person Oleksandr_DJ; 14.03.2017
comment
В Windows 10 IE 11 я получаю предупреждение о том, хотите ли вы разрешить этой веб-странице доступ к вашему буферу обмена? .... Это неприемлемо для нашего клиента. Так что, похоже, у нас нет способа сделать это. - person BBaysinger; 10.05.2018
comment
В течение многих лет я говорил, что разработчики должны блокировать IE. IE был нашим кошмаром и цепями, которые годами сдерживали эволюцию Интернета. Но вот частичное решение: показать сообщение, что пользователь должен разрешить копирование / вставку, и показать огромный текст с символами, которые он должен скопировать и вставить в текстовое поле. И порекомендуйте пользователю другие браузеры, чтобы избежать осложнений. Я зашел слишком далеко? - person Marcelo Agimóvel; 11.05.2018
comment
Я предлагаю использовать наведение курсора вместо фокуса. $ (окно) .mouseover (function () {$ (body) .show ();}). mouseout (function () {$ (body) .hide ();}); - person Cédric Boivin; 13.12.2018
comment
Ваше решение работает, но, как сказал @Oleksandr_DJ, есть недостатки, когда вы можете использовать win + print и по-прежнему можете делать снимки экрана. Есть ли способ отключить и это? - person Daredevil; 18.02.2019

Это невозможно.

person Sjoerd    schedule 28.06.2010
comment
А если бы это было так, то это довольно быстро обошли бы. - person Patrick Hendricks; 28.06.2010
comment
Клавиша экрана печати - это функция ОС, и вы не имеете абсолютно никакого права изменять ее поведение с веб-страницы. Это похоже на установку программного обеспечения на жесткий диск. Вообще говоря, не существует реального способа предотвратить загрузку содержимого веб-сайта пользователем. Вы можете немного усложнить задачу, но это будет лишь вопросом времени. - person slaphappy; 28.06.2010
comment
В общем: в какой-то момент данные должны отображаться пользователю. В этот момент любой целеустремленный пользователь может его захватить. По крайней мере, есть устройства, которые будут находиться между вашим ПК и монитором, полностью отделенными от ПК и записывать все, что отправляется на монитор. - person Matthew Scharley; 28.06.2010
comment
Или они могут использовать камеру, которая может быть совершенно не подключена к какому-либо компьютеру. Они даже могли использовать камеру, которая записывает на пленку вообще без каких-либо цифровых компонентов; нет никакого способа остановить это, кроме как никогда не показывать информацию пользователю. - person Donal Fellows; 28.06.2010
comment
Такое ограничение будет настолько раздражать пользователей, что они, вероятно, никогда больше не вернутся на вашу страницу. Это помешало бы им распечатать, но я не думаю, что вы этого хотите. Кстати, написать фрагмент кода, который загружает страницу, так же просто, как WebClient.DownloadString (если вы пишете .NET) или любой из бесчисленных эквивалентов на других языках - person Panagiotis Kanavos; 28.06.2010
comment
@JSmaga Это будет самая универсальная ОС в истории: Особенности: Невозможно делать скриншоты!; D - person deceze♦; 28.06.2010
comment
@deceze Через 6 месяцев вы можете выпустить пакет обновления 1, включающий функцию Anti copy-paste. - person SRKX; 28.06.2010
comment
@deceze @JSmaga ну .... Все равно было бы лучше Висты! xkcd.com/528 - person Pekka; 28.06.2010
comment
Даже с ОС без возможности создания снимков экрана вы все равно можете поместить экран на сканер или сфотографировать его: p - person Svish; 29.06.2010
comment
@Svish, ваш комментарий был одним из самых смешных, что я читал на SO - person Bhushan; 20.04.2013
comment
Это вообще ответ на вопрос? - person Ubi hatt; 21.05.2019

К счастью, эту возмутительную идею невозможно надежно реализовать, ни часть «отключить захват экрана», ни часть «отключить расширения Firefox пользователя». И даже если бы это было так, как указывает @kbok в своем комментарии выше, у вас нет права на это.

Единственный способ защитить ваш контент в Интернете - это законы об авторском праве - упоминания о них часто бывает достаточно, чтобы отпугнуть людей от неправильного использования! - или вообще не показывать.

person Pekka    schedule 28.06.2010
comment
Достаточно часто упоминать законы об авторском праве ??? Кто говорит? Миллионы людей во всем мире воруют средства массовой информации, авторские права на которые принадлежат другим лицам. Защиты США недостаточно за границей. Это федеральное преступление с суровыми наказаниями, включая крупные шестизначные штрафы и несколько лет тюрьмы. Это не возмутительная идея. Просто письмо от нового разработчика, который пытается защитить носители, принадлежащие ему или его клиентам. Вы имеете право делать со своим сайтом все, что хотите, в плане защиты. UX может пригодиться. Не каждый может позволить себе судиться с нарушением авторских прав. Даже если бы они смогли выиграть, это потребует времени и денег. - person DavidG; 12.04.2020
comment
Несколько крупных технологических компаний, имена которых я не буду называть, украли запатентованные идеи и заблокировали патент в суде на долгие годы и потратили миллионы долларов на борьбу, пока маленькому парню не придется оставить свой приз. - person DavidG; 12.04.2020

Попробуй это

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

Надеюсь, что это работает

person ZX12R    schedule 28.06.2010
comment
Это очень быстро разваливается: просто сосредоточьтесь на другом окне, затем сделайте снимок экрана. - person Matthew Scharley; 28.06.2010
comment
Как я уже сказал ниже, почти наверняка событие keyup запускается после того, как экран уже напечатан ... - person nokturnal; 23.05.2012
comment
@MatthewScharley, он может избежать использования этого кода: $ (window) .focus (function () {$ (. Content) .show ();}). Blur (function () {$ (. Content) .hide (); alert ('nonono, без пончиков!');}); - person Marcelo Agimóvel; 10.03.2017

Вы можете изменить содержимое буфера обмена с помощью JavaScript или Flash. Это уже немного помогает.

person Leo    schedule 29.06.2010

Как сказал @Sjoerd, это невозможно.

Если это изображения, которые вы хотите защитить, я предлагаю вам, например, отображать изображения более низкого качества с водяными знаками, а при необходимости отображать только высококачественные изображения без водяных знаков.

Но да ... Если вы хотите, чтобы их нельзя было скопировать ... не выкладывайте их в Интернет.

person Svish    schedule 28.06.2010
comment
Мне не нравится, что термин «невозможно» ... из всех вещей во вселенной это не то, что я бы сказал, что это невозможно. Я думаю, что лучше подходит слово «невыполнимое». Может, я педантичен, но мне просто не нравится, что мы, человечество, недооцениваем себя. Кто-то мог бы это сделать, если бы действительно захотел. Следовательно ... вполне возможно. - person 4imble; 28.06.2010
comment
Хоть и не нравится, но есть много невозможного. И это один из таких. - person Hernán Eche; 28.06.2010
comment
Да, как ты мог сделать это невозможным? Если он на экране, ничего не поделаешь. Как бы вы помешали кому-то взять фотоаппарат и, например, сфотографировать экран? - person Svish; 29.06.2010
comment
Это невозможно ... если его можно просмотреть, его можно как-то скопировать. - person nokturnal; 23.05.2012

Прямого метода для этого не существует, однако есть способ максимально защитить ваш контент от prnt scrn.

Идея такая:

  1. сделайте ваш контент недоступным, если java отключен, и используйте какой-нибудь скрипт, например, защиту от копирования Artist Scope.

  2. При обнаружении prnt scrn администратору будет отправлено сообщение с информацией о зарегистрированном пользователе, это означает, что ограниченный контент, доступный только участникам, может извлечь выгоду из этого. отправка IP -адресов кажется хорошей идеей, но запрет IP-адресов - нет, поэтому вы не получите от этого особой выгоды.

  3. Выйдя за пределы окна вашего веб-сайта, ваш контент будет покрыт наложением, которое нельзя удалить, если вы не вернетесь на свой веб-сайт и не активируете его, что повторно активирует код обнаружения prnt scrn, упомянутый в предыдущем пункте.

  4. Если устройство является мобильным, вы можете либо скрыть изображения, либо, как в моем случае, перенаправить на страницу с извинениями.

  5. snipping tool и другие аналогичные расширения и надстройки браузера будут бесполезны. кроме одного инструмента, который я нашел под названием захват экрана всей страницы

    • this tool captures web content after about 3 seconds from pressing button, which is enough time to dismiss the overlay and get back to your content
    • Хорошим решением будет запуск счетчика при нажатии кнопки «отклонить оверлей», для чего потребуется 5 секунд или больше, т.е. после того, как это расширение уже сделало снимок
  6. Также есть косвенный метод предотвращения захвата видео, все еще работающий над ним, опубликую здесь или в моем блоге.

  7. Если ваш контент действительно того стоит, пользователи все равно могут снимать его на свои камеры, может быть, есть и способ для этого! Но мне все равно нужно провести небольшое исследование, прежде чем говорить об этом.

Я буду обновлять этот пост в своем блоге для других методы, которые я использовал / буду использовать для большей защиты. Пожалуйста, проверьте эту викторину (все еще в разработке) для демонстрации.

person iJassar    schedule 20.10.2014

Вы можете скопировать в буфер обмена что-то еще, когда пользователь нажимает кнопку печати экрана. Это пример, и я копирую пользовательский текст.

<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');
      };
    });
});
person Piotr Kazuś    schedule 07.12.2015
comment
Это даже не до $ (window) .keyup (function (e) {part - person ; 30.05.2016

Почему вы хотите предотвратить печать экрана?

Если вы хотите защитить какие-то фотографии, вы можете поместить их в низком разрешении и программно включить какой-либо логотип авторского права в php.

Я думаю, что это почти все.

person SRKX    schedule 28.06.2010

Вот еще одно решение:

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

    }); }); </script>

Это похоже на решение @ZX12R. Положительным моментом является то, что этот код будет работать, даже если программное обеспечение для захвата экрана печати является сторонним инструментом (например, snagIt).

Вы можете заменить $("body").hide(); чем-нибудь, что вам больше подойдет. Например, вы можете скрыть все изображения $("img").hide(); и, возможно, показать их через секунду.

Обратной стороной является то, что это не будет работать, если веб-страница не является активным окном.

person Haluk    schedule 20.09.2011
comment
Я почти уверен, что проверка печати уже произошла до запуска события keyup ... - person nokturnal; 23.05.2012
comment
Также можно использовать инструмент «Ножницы» или аналогичный или просто нажать клавишу экрана печати без активного окна, и веб-страница даже не получит событие. - person Svish; 24.05.2012
comment
К сожалению, в OS X это не сработает, так как комбинация клавиш совершенно другая. - person Fizzix; 23.08.2015