Как использовать ZeroClipboard в jQuery?
Я просто не могу получить эту вещь. Как должен работать ZeroClipboard? Зачем нужно перемещать flash-элемент поверх скопированного текста?
Я читал эту вещь: http://code.google.com/p/zeroclipboard/wiki/Instructions
Может ли кто-нибудь предоставить мне короткий фрагмент, который позволяет скопировать текст в переменной в буфер обмена пользователей, когда пользователь нажимает на ссылку. Возможно ли это? Мне все равно, если он не работает во всех браузерах (например, IE6).
Я использую jQuery.
Ответы
Ответ 1
Код минимального примера, указанный на странице, на которую вы ссылаетесь (http://code.google.com/p/zeroclipboard/wiki/Instructions#Minimal_Example), по-видимому, является тем, что вы хотите. Я скопировал его здесь и изменил его, чтобы продемонстрировать ввод текста в переменную, а затем скопировать этот текст в буфер обмена, так как это вас интересует. Обратите внимание, что в реальной жизни то, что вы, по-видимому, хотите сделать, вызовите часть clip.setText()
внутри некоторой функции, так как вы можете не знать, в момент, когда страница была сначала загружена, какой текст вы хотите скопировать.
<html>
<body>
<script type="text/javascript" src="ZeroClipboard.js"></script>
<div id="d_clip_button" style="border:1px solid black; padding:20px;">Copy To Clipboard</div>
<script language="JavaScript">
var clip = new ZeroClipboard.Client();
var myTextToCopy = "Hi, this is the text to copy!";
clip.setText( myTextToCopy );
clip.glue( 'd_clip_button' );
</script>
</body>
</html>
Элемент flash не должен быть "над скопированным текстом"; он должен быть "приклеен" к любому элементу DOM, который вы хотите, чтобы ваш пользователь манипулировал - скорее всего, кнопка для клика. Причина в том, что Javascript не имеет доступа к буферу, поэтому вам нужно использовать Flash вместо этого. Но Flash может работать только на пользовательском компьютере в ответ на щелчок пользователя - поэтому вы "обманываете" пользователя нажатием на Flash, делая его невидимым наложением над элементом HTML.
Я хочу заметить, что, хотя конкретный пример копирования в пользовательский буфер обмена, вероятно, небезопасен, этот подход меня беспокоит, так как нетрудно представить, что скрытый элемент flash делает больше вредоносной вещи.
Ответ 2
Несколько более сложный пример jquery. Скопируйте текст, когда
<script language="JavaScript">
ZeroClipboard.setMoviePath('zeroclipboard/ZeroClipboard.swf');
$(document).ready(function(){
$(".clickme").each(function (i) {
var clip = new ZeroClipboard.Client();
var myTextToCopy = $(this).val();
clip.setText( myTextToCopy );
clip.addEventListener('complete', function (client, text) {
alert("Copied text to clipboard." );
});
clip.glue( $(this).attr("id") );
});
});
</script>
<?php
//these text boxes were in a loop
for($i=0;$i<10;$i++)
echo "<input type=\"text\" id=\"x$i\" class=\"clickme\" value=\"$value"\" />";
?>
Ответ 3
Этот код работает только в моей настройке вместе с хром, когда у меня есть тег в моей области тела, например
<script type="text/javascript" src="js-file-doesnt-exists-404.js"></script>
<div>
......
some stuff here
......
....
</div>
...some more stuff....
<the button>
....
когда удаляется файл файл, кнопка не работает.... действительно странно
Ответ 4
Текущая версия ZeroClipboard фактически содержит ошибку, которая приведет к ошибке JS с использованием script, предложенной JacobM, - в следующем сценарии
- Создайте ссылку на ZeroClipboard.Client(), возвращенный из нового конструктора. (например, var clip = new ZeroClipboard.Client();)
- Задайте текст, выполнив clip.setText( "string" );
- Измените DOM (скройте флеш-ролик или элемент предка)
- Задайте текст еще раз, выполнив clip.setText( "некоторая другая строка" )
Чтобы избежать возникновения ошибок, вместо этого нужно использовать прослушиватель событий mouseover для установки текста:
<html>
<body>
<script type="text/javascript" src="ZeroClipboard.js"></script>
<div id="d_clip_button">Copy To Clipboard</div>
<script language="JavaScript">
var clip = new ZeroClipboard.Client(),
myTextToCopy = "Hi, this is the text to copy!";
clip.glue('d_clip_button');
clip.addEventListener('onMouseOver', clipboardEvent);
function clipboardEvent() {
clip.setText( myTextToCopy );
}
</script>
</body>
</html>