Как можно обнаружить копирование ссылки в браузере?

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

Я не веб-разработчик, так что это может быть хромым вопросом:-), но мне интересно как это делается?. Какая технология или язык дает один такой уровень контроля над событиями в браузере?

На сайте был какой-то сервис загрузки фильмов, насколько я понял. Я не спросил его, какой браузер он использовал, но его платформа была WinXP, поэтому, скорее всего, это был IE. Поскольку я понятия не имею о технологии, реализующей эту функцию, я не могу добавлять теги, специфичные для технологии, но если вы знаете подходящую, не стесняйтесь ее добавлять.

Отказ от ответственности: -)

После чтения ответов большинство, похоже, сходится к мнению, что

  • на странице браузера довольно легко достичь, но
  • в адресной строке это не возможно, если возможно вообще.

Я специально спросил, чтобы убедиться, что он имел в виду, что он копировал URL-адрес из адресной строки, и он подтвердил это. Тем не менее, это может быть непонимание с обеих сторон. Я не видел этого события, поэтому я могу только повторить его описание, как я его слышал.

Ответ 1

Во-первых, есть событие rightclick. Это легко уловить и отреагировать.

Также существует более общее событие contextmenu, но оно не применяется к браузерам, отличным от IE.

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

Существуют основанные на клавиатуре методы открытия контекстного меню, и я ожидаю, что они все равно будут работать.

Простейшей реализацией jQuery этого поведения является трехстрочный:

$("a").rightclick(function () {
  alert("Please don't copy our links!"); return false;
});

Что касается "предотвращения копирования из адресной строки" - никак. Они не могли этого сделать.

Ответ 2

Это было возможно с IE7 и более ранними версиями Flash 10.

В IE7 (и, я думаю, 8), вы можете просто:

var vulnerability = window.clipboardData.getData("Text");

Это уязвимость, и по умолчанию IE9 запрещен. В Firefox по умолчанию отключено подключение к интерфейсу Clipboard. В Safari/Chrome это тоже не допускается, EXCEPT явно в обработчиках onPaste.

В Flash вы можете просто сделать Clipboard.getData() до нескольких месяцев назад. Буфер обмена теперь имеет доступ только для записи во Flash (но все еще сохраняет его полную возможность в воздухе).

В IE вы можете видеть, насколько это было бы тривиально. Просто звоните window.clipboardData.getData("Text") каждые пару секунд. С Flash это было бы не намного сложнее. Просто подключите функцию Javascript к вашему Flash-видео и зациклируйте видео.

Доступ к буферу в вышеупомянутом типе ad hoc сейчас невозможен во всех основных браузерах.

Ответ 3

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

Скорее всего, страница либо не позволяла щелкнуть правой кнопкой мыши по ссылке, либо сделать CTRL + C внутри самой страницы.

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

Ответ 4

Я видел пару сайтов, которые отключили события прямого щелчка в любом месте страницы, с сообщением, похожим на ваш

Пожалуйста, не копируйте эту ссылку, скорее зарегистрируйтесь

Я предполагаю, что это делается с помощью javascript. Возможно, с IE у вас может быть элемент управления ActiveX, который дает разработчику больше контроля над браузером.