Я помню как все начиналось и могу рассказать об этом. Давным давно, когда динозавры пользовались модемами, сайты называли домашними страничками, а слово «google» ничего не значило, у сайтов все равно были URL’ы. Мы называли их адресами сайтов и, если хотелось повыпендриваться, могли даже сказать «уникальные адреса веб-узлов, размещенных в глобальной сети Интернет». Программисты, которых сейчас называют айти-специалистами, были предоставлены сами себе в вопросах, касавшихся веб-программирования, что и привело к ожидаемым результатам — странным адресам страниц. Стандартным примером в те времена мог послужить адрес вроде blablabla.com/?sid=23l&pid=ln123&youare=cookiemonster, который иногда был обозначением страницы поиска, а через пять минут уже мог вести в каталог товаров. Тогда словно паладины сил добра без страха в сердце появились новые ребята. Они выглядели странно, занимались только консультациями и называли себя юзабилистами.

Они обозначили конец эпохи Программистских вакханалий и каким-то образом привели к исчезновению динозавров. Было бы удивительно, если бы юзабилисты ничего не сказали об адресах страниц, поэтому они не стали молчать. На камне высекли самое важное утверждение, которое касалось URL’ов: Ибо сказано, что есмь URL и быть ему читаемым и вести постоянно на одну и ту же страницу, дабы любой пользователь или пользовательница могли его разуметь и им обмениваться. Все знают, что любой опубликованный в интернете факт становится достоверным как только его проиндексирует гугл. Так случилось и в этот раз. С того момента люди стали наслаждаться читаемыми и понятными адресами страниц, содержание которых не менялось со временем. Дошло до того, что это прижилось даже на флеш и аякс-сайтах, а адреса определенных страниц или разделов стали выглядеть примерно так: blablabla.com/products/media-and-socialising/you-ve-got-rickrolld.

После всех эти революционных событий началась социо-сетевая мания, так называемый вебдваноль. Большие объемы инфорамции привели к тому, что ее надо было хоть как-то размещать, не особенно заботясь о читаемости адреса. На передний план вышел обмен и распространение ссылок. Веб-разработчики и юзабилисты должны были сделать все, чтобы пользователь без труда мог разослать адрес конкретной страницы с видео-роликом или шуткой всем, до кого дотянется. Вот так и появились замечательные кнопки «Скопировать адрес этой страницы/видео/порно/статьи». Недостаточная стандартизация и по-прежнему негодные технологии привели к тому, что самым удобным инструменом для запихивания информации в буфер обмена пользователя оказался флеш. Когда пользователи кликали на кнопку, специальный яваскрипт встраивал в страницу уже готовый маленький флеш-ролик, который и отвечал за копирование.

Поскольку никто никогда не относился к буферу обмена очень серьезно, считая, что хранить в нем важную информацию так же умно, как и рабочие документы в корзине, не была предусмотрена защита от несанкционированного копирования в буфер обмена чего-либо из флеш-ролика без ведома пользователя. Осознав это, Adobe сообщил: С этого момента (Flash 10) если пользователю хочется что-то скопировать, то он должен повзаимодействовать с роликом. Буквально: пользователь должен кликнуть на кнопку или ссылку в ролике, чтобы тот мог получить доступ к буферу обмена. Переложив, таким образом, вину за заполнение буфера всякой ерундой на пользователя, Adobe умыл руки.

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

Если нажать на кнопку, то в буфер обмена скопируется текст «/mega/ — schlong is schlonger»

Вот так выглядит код встраивания с небольшим улучшением в виде апострофов вместо знаков дюйма для значения flashvars, чтобы сделать возможным копирование html-тагов с параметрами (допустим, что все файлы находятся в одной папке):

  1. <object width="636" height="48">
  2. <param name="movie" value="copybtn.swf">
  3. <param name="flashvars" value='normal=btn0.png&pressed=btn2.png&hover=btn1.png&clipboard=<a href="/mega/">mega.genn.org</a> — schlong is schlonger' />
  4. <embed src="copybtn.swf" flashvars='normal=btn0.png&pressed=btn2.png&hover=btn1.png&clipboard=<a href="/mega/">mega.genn.org</a> — schlong is schlonger' width="636" height="48" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" />
  5. </object>

David-m, комментируя пост Юры, заметил, что удобней было бы сделать прозрачный флеш-ролик с теми же функциями, который можно расположить над любым элементом на странице. Я сделал и такой вариант. Из всех параметров, разумеется, остался только clipboard. Если понравилось, то логично будет скачать оба swf’а в архиве (zip, 4 Кбайта).