Привет всем!
Вот хочу спросить у знающих людей:
У меня есть JS который по нажатию кнопки копирует текст в буфер обмена:

Выделить код

Код:

<script type='text/javascript'>

function copy_clip(whattext)
{ if (window.clipboardData)
{window.clipboardData.setData("Text", whattext);}
else if (window.netscape) {
 netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
 var clip = Components.classes['@mozilla.org/widget/clipboard;1'].createInstance(Components.interfaces.nsIClipboard);
 if (!clip) return;
 var trans = Components.classes['@mozilla.org/widget/transferable;1'].createInstance(Components.interfaces.nsITransferable);
 if (!trans) return;
 trans.addDataFlavor('text/unicode');
 var str = new Object();
 var len = new Object();
 var str = Components.classes["@mozilla.org/supports-string;1"].createInstance(Components.interfaces.nsISupportsString);
 var copytext=whattext;
 str.data=copytext;
 trans.setTransferData("text/unicode",str,copytext.length*2);
 var clipid=Components.interfaces.nsIClipboard;
 if (!clip) return false;
 clip.setData(trans,null,clipid.kGlobalClipboard);}
 return false;}
</script>

И собственно кнопка вызывающая JS:

Выделить код

Код:

<input type='button' value=' ' onClick="copy_clip('ЭТОТ ТЕКСТ ИДЕТ В БУФЕР')">

И Что самое интересное: на IE работает отлично, а вот в Mozilla - нет :(
Подскажите пожалуйста, в чем проблема? Может быть параметры безопасности браузера как то влияют?
Спасибо.

по соображениям безопасности не поддерживается в fx копирование в буффер обмена со страниц

Shutnik пишет

по соображениям безопасности не поддерживается в fx копирование в буффер обмена со страниц

Shutnik пишет

по соображениям безопасности не поддерживается в fx копирование в буффер обмена со страниц

Получается, что в Mozilla вообще никак не реализовать копирование текста в буфер обчена? :cry:

Почему же..реализовать можно
Необходимо, чтобы у пользователя стояло расширение NoScript и было разрешено "работа с буффером обмена на доверенных сайтах"

Vednier
отличная идея просить всех пользователей ставить noscript, чтобы у них заработало копирование в буффер обмена: rolleyes:

Кстати, есть варианты с буфером:
http://forum.mozilla-russia.org/uploade … .0.3.1.zip – см. функцию doClipboard и clipboard.swf
(стащил из кода какого-то теста – там можно было результаты скопировать)

Infocatcher
хм, странно, там код такой запутанный :(
Попробовал сделать функцию так:

Выделить код

Код:

function copy_clip(txt) {
				if(window.clipboardData) {
					window.clipboardData.setData("Text", txt);
				}
				else {
					var fc = document.getElementById("flashCopier");
					if(!fc) {
						fc = document.createElement("div");
						fc.id = "flashCopier";
						document.body.appendChild(fc);
					}
					fc.innerHTML = '<embed src="password_generator-0.0.3.1_files/clipboard.swf" FlashVars="clipboard=' +
						encodeURIComponent(txt) +
						'" width="0" height="0" type="application/x-shockwave-flash"></embed>';
				}
				return false;
			},

Не работает, что ж такое то

Adobe

там код такой запутанный

Это из-за того, что делалось с совсем другой целью...

Выделить код

Код:

function doClipboard(txt) {
	if(window.clipboardData) { // IE
		window.clipboardData.setData("Text", txt);
	}
	else { // не IE
		var fc = document.getElementById("flashCopier");
		if(!fc) { // Элемент с "flashCopier" не существует
			fc = document.createElement("div"); // создаем
			fc.id = "flashCopier"; // добавляем id
			document.body.appendChild(fc); // добавляем созданный элемент к <body>
		}
		fc.innerHTML = '<embed src="clipboard.swf" FlashVars="clipboard=' + // src="clipboard.swf" - путь к clipboard.swf
			encodeURIComponent(txt) +
			'" width="0" height="0" type="application/x-shockwave-flash"></embed>';
	}
}
doClipboard("some text");

P.S. Разумеется, без флеш-плеера работать не будет...

P.P.S. А вообще,
Инструменты – Консоль ошибок
– можно узнать, что именно не нравится Firefox.

Infocatcher
А clipboard.swf надо на саму страницу выносить? А то у меня не работает :)

Видите дело то в чем, у меня обычная таблица из 2-х столбцов и множества строк с одновродной инфой,
В 1-м столбце у меня кнопка которая будет копировать то что стоит рядом (во 2-м столбце)
Но это не суть важно т.к. при нажатии на кнопку, она вызывает функцию и говорит ей что заносить в буфер :) все это дело средствами php, только что копирование в буфер мне надо через JS

А clipboard.swf надо на саму страницу выносить?

Файл должен находиться где-нибудь на сервере. А в src надо прописать ссылку на него.
Скрипт при первом использовании копирования добавит clipboard.swf на страницу.

Infocatcher
Ну clipboard.swf у меня лежит рядом со скриптом
Вызов происходит нажатием кнопки:

Выделить код

Код:

<input type='button' value=' ' onClick=\"doClipboard('I WANT IN CLIPBOARD')\">

Странно, не работает почему то, и консоль ошибок молчит

Добавлено Tue Mar 25 21:09:51 2008 :
В коде странице выглядит вот так:

Выделить код

Код:

function doClipboard(txt) {
    if(window.clipboardData) { // IE
        window.clipboardData.setData("Text", txt);
    }
    else { // не IE
        var fc = document.getElementById("flashCopier");
        if(!fc) { // Элемент с "flashCopier" не существует
            fc = document.createElement("div"); // создаем
            fc.id = "flashCopier"; // добавляем id
            document.body.appendChild(fc); // добавляем созданный элемент к <body>
        }
        fc.innerHTML = '<embed src="clipboard.swf" FlashVars="clipboard=' + // src="clipboard.swf" - путь к clipboard.swf
            encodeURIComponent(txt) +
            '" width="0" height="0" type="application/x-shockwave-flash"></embed>';
    }
}

кнопка

Выделить код

Код:

<input value=" " onclick="doClipboard('9183B-DD999-6AF78-AC4A1-6B424')" type="button">

Adobe
А в IE копируется (этим же скриптом)?

Infocatcher
В IE все отлично копируется, а вот mozilla не реагирует что то.

Adobe
Ну, не знаю... У меня все работает – в Firefox 2.0.0.13, 3.0b4, в Opera 9.26 (9.50b не проверял) и в Safari 3.1 для Windows.
А если после попытки копирования выделить весь текст, выбрать «Просмотр исходного кода выделенного фрагмента» (или можно через DOM Inspector или Firebug посмотреть), там в самом низу <div id="flashCopier"><embed src= ... </div></body> есть?

там в самом низу <div id="flashCopier"><embed src= ... </div></body> есть?

Нет, нету.

Дк получается, что в буфер копируется, все что расположено на clipboard.swf? Так что ли :(

Нет, нету.

Значит или это глюк, или скрипт неправильно скопирован...

Дк получается, что в буфер копируется, все что расположено на clipboard.swf?

В смысле?
После .innerHTML браузер «перепрорисовывает» флэш-объект, посылая на него нужные нам параметры – строку для копирования в буфер.

Хм, попробовал все это дело вывести ни чистую страницу html - работает, тоже самое в станице php - не работает :( у меня там правда несколько функций, но думаю это не должно мешать.

у меня там правда несколько функций, но думаю это не должно мешать.

Угу, если имена разные.

Возможно, проблема в кавычках...
Можно, например, вот так попробовать:

Выделить код

Код:

fc.innerHTML = "<embed src=\"clipboard.swf\" FlashVars=\"clipboard=" +
	encodeURIComponent(txt) +
	"\" width=\"0\" height=\"0\" type=\"application/x-shockwave-flash\"></embed>";

==> Разработка

а возможно получить содержимое буфера обмена?

А зачем это вообще может быть нужно кроме перехвата паролей пользователей? :)