
Я помню как все начиналось и могу рассказать об этом. Давным давно, когда динозавры пользовались модемами, сайты называли домашними страничками, а слово «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 придумал как с этим бороться: можно создать флеш-ролик, который будет вести себя как кнопка, а изображения кнопки в разном состоянии передавать в него параметром как и текст, который надо скопировать. Я помог ему, создав такой ролик.
Если нажать на кнопку, то в буфер обмена скопируется текст «http://mega.genn.org/ — schlong is schlonger»
Вот так выглядит код встраивания с небольшим улучшением в виде апострофов вместо знаков дюйма для значения flashvars, чтобы сделать возможным копирование html-тагов с параметрами (допустим, что все файлы находятся в одной папке):
<object width="636" height="48"><param name="movie" value="copybtn.swf"><param name="flashvars" value='normal=btn0.png&pressed=btn2.png&hover=btn1.png&clipboard=<a href="http://mega.genn.org/">mega.genn.org</a> — schlong is schlonger' /><embed src="copybtn.swf" flashvars='normal=btn0.png&pressed=btn2.png&hover=btn1.png&clipboard=<a href="http://mega.genn.org/">mega.genn.org</a> — schlong is schlonger' width="636" height="48" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" /></object>
David-m, комментируя пост Юры, заметил, что удобней было бы сделать прозрачный флеш-ролик с теми же функциями, который можно расположить над любым элементом на странице. Я сделал и такой вариант. Из всех параметров, разумеется, остался только clipboard. Если понравилось, то логично будет скачать оба swf’а в архиве (zip, 4 Кбайта).


[...] 16. 18 апреля | mega.genn.org » Flash 10 Antipasti и жизнь URL [...]
Сказка занимательная, пробудила ностальгию. Только Москва не сразу строилась, и web-серверы не могли расчленить URL на часть, указывающую на существующую директорию, и на часть, указывающую на уточняющие параметры. Поэтому параметрам пришлось выглядить столь неестественно в естесвенном для человека мире интернета.
Было бы полезно добавить во флешку прозрачное отслеживание кликов через sendVars.
Олег, даже тогда можно было делать адреса news.php?day=6&month=4&year=1998 вместо news.php?sid=23sddsf…&date= 891820800. В первом примерер все понятно, а во втором присутствует стандартный для тех времен и зачастую никому не нужный session id (который можно и убрать из URL’а, запихнув в те же cookies) и дата в юниксовском формате времени.
Отслеживание для того, чтобы мы точно знали, скопировал ли пользователь адрес?
Нет сведений, что никто не додумался называть переменные так, как показано в первом примере. Session id добавлялся в URL интерпретатором языка автоматически, если было замечено, что через куки он не сохраняется.
Да. Для статистики, чтобы точно знать какие темы людям интересны, или какие тексты (куски кода) в действительности полезны.
“Notify me of followup comments via e-mail” не работает, а очень надеялся.)
Олег, сведений нет, но есть огромный опыт работы. Я, конечно, слегка преувеличиваю и ерничаю, но доля правды в моих словах все же есть, и немалая ;) Достаточно вспомнить весь тот ворох статей и заметок в конце 90-х о так коряво называемых «человеко-понятных урлах».
Для оповещения по почте отыщу другой скрипт. Спасибо за bug report. ;)
Код гиперлинка не копируется. Повтор двойных кавычек.
А ламерское счастье казалось таким близким …
shinkareff, спасибо за то, что нашли ошибку. Сейчас окончательно проснусь и все исправим ;) А что значит «повтор двойных кавычек»?
Не уверен, что здесь код отобразится, но попробую:
shinkareff, код не отобразился, но я уже прочитал комментарии и в CSSing. Проблема решается (я переделал пост так, чтобы ее и не возникало) просто — для передачи параметров используем flashvars и пишем их значение в знаках апострофа, чтобы не конфликтовало с тагами, которые мы копируем. Изменения отображены в коде представленном в посте ;)
BTW, такой же подход, как ты описал использует библиотека SWFUpload (v 2.2) для загрузки на сервер файлов с помощью Flash Player
http://demo.swfupload.org/v220/index.htm
Great minds think alike!
До речі, дарую ідею – назвати свій підхід як SWFClipboard (уже є SWFAddress, SWFUpload, SWFObject…) і активно пропагувати його в Інтернеті, адже чим більше користувачів, тим краще можна буде відточити свій код.
А от FlashClipboard називати свій підхід не вартує, юристи Adobe заставлять перейменувати ;)
JabbyPanda, дякую за iдею. SWFAddress я навiть користуюсь ;)
Всё вроде хорошо, но вот есть проблема!
Мне нужно чтоб кнопка скопировала [http://www.zippyshare.com/mediaplayer/mediaplayer.swf?file=http://www21.zippyshare.com/downloadMusic%3Fkey%3D29157749xx&volume=80&autostart=false&frontcolor=0×000000&backcolor=0xa63500&lightcolor=0xffffff&type=flv]
но копируется только [http://www.zippyshare.com/mediaplayer/mediaplayer.swf?file=http://www21.zippyshare.com/downloadMusic%3Fkey%3D29157749xx] – это.
Скрипт категорически отказывается копировать всё что находиться после символа &
Что делать?
Alex, замените & на %23.
%23 = #
а мне именно необходим – &
Задумался о чем-то и написал не то ;) %38 — это как раз код амперсанда.
теперь копирует всё, но не заменяет %38 на & (((