Полезная информация

Будьте в курсе последних изменений в мире Mozilla, следя за нашим микроблогом в Twitter.

№124-03-2008 15:33:37

Adobe
 
Группа: Guest
UA: Minefield 3.0

JS не копирует в буфер обмена

Привет всем!
Вот хочу спросить у знающих людей:
У меня есть 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 - нет :(
Подскажите пожалуйста, в чем проблема? Может быть параметры безопасности браузера как то влияют?
Спасибо.

 

№224-03-2008 15:52:02

Shutnik
Участник
 
Группа: Extensions
Зарегистрирован: 12-11-2005
Сообщений: 3785
UA: Firefox 2.0

Re: JS не копирует в буфер обмена

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

Отсутствует

 

№324-03-2008 16:06:48

Adobe
 
Группа: Guest
UA: Minefield 3.0

Re: JS не копирует в буфер обмена

Shutnik пишет

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

Shutnik пишет

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

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

 

№424-03-2008 16:48:22

Vednier
Участник
 
Группа: Members
Откуда: В ауте
Зарегистрирован: 23-11-2006
Сообщений: 1430
UA: Minefield 3.0

Re: JS не копирует в буфер обмена

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


Свобода только тут - mozilla@conference.jabber.ru

Отсутствует

 

№524-03-2008 17:52:53

Shutnik
Участник
 
Группа: Extensions
Зарегистрирован: 12-11-2005
Сообщений: 3785
UA: Firefox 2.0

Re: JS не копирует в буфер обмена

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

Отсутствует

 

№624-03-2008 21:47:13

Infocatcher
Not found
 
Группа: Extensions
Зарегистрирован: 24-05-2007
Сообщений: 4339
UA: Firefox 2.0

Re: JS не копирует в буфер обмена

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

Отредактировано Infocatcher (24-03-2008 21:47:50)


Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела

Отсутствует

 

№725-03-2008 14:22:26

Adobe
Участник
 
Группа: Members
Зарегистрирован: 25-03-2008
Сообщений: 16
UA: Minefield 3.0

Re: JS не копирует в буфер обмена

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;
			},

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

Отсутствует

 

№825-03-2008 16:16:36

Infocatcher
Not found
 
Группа: Extensions
Зарегистрирован: 24-05-2007
Сообщений: 4339
UA: Firefox 2.0

Re: JS не копирует в буфер обмена

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 (25-03-2008 16:27:12)


Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела

Отсутствует

 

№925-03-2008 20:23:32

Adobe
Участник
 
Группа: Members
Зарегистрирован: 25-03-2008
Сообщений: 16
UA: Minefield 3.0

Re: JS не копирует в буфер обмена

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

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

Отредактировано Adobe (25-03-2008 20:24:17)

Отсутствует

 

№1025-03-2008 20:58:03

Infocatcher
Not found
 
Группа: Extensions
Зарегистрирован: 24-05-2007
Сообщений: 4339
UA: Firefox 2.0

Re: JS не копирует в буфер обмена

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

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


Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела

Отсутствует

 

№1125-03-2008 21:05:06

Adobe
Участник
 
Группа: Members
Зарегистрирован: 25-03-2008
Сообщений: 16
UA: Minefield 3.0

Re: JS не копирует в буфер обмена

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">

Отсутствует

 

№1225-03-2008 21:12:43

Infocatcher
Not found
 
Группа: Extensions
Зарегистрирован: 24-05-2007
Сообщений: 4339
UA: Firefox 2.0

Re: JS не копирует в буфер обмена

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


Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела

Отсутствует

 

№1326-03-2008 05:10:15

Adobe
Участник
 
Группа: Members
Зарегистрирован: 25-03-2008
Сообщений: 16
UA: Minefield 3.0

Re: JS не копирует в буфер обмена

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

Отсутствует

 

№1426-03-2008 08:43:09

Infocatcher
Not found
 
Группа: Extensions
Зарегистрирован: 24-05-2007
Сообщений: 4339
UA: Firefox 2.0

Re: JS не копирует в буфер обмена

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> есть?


Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела

Отсутствует

 

№1526-03-2008 09:36:11

Adobe
Участник
 
Группа: Members
Зарегистрирован: 25-03-2008
Сообщений: 16
UA: Minefield 3.0

Re: JS не копирует в буфер обмена

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

Нет, нету.

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

Отсутствует

 

№1626-03-2008 09:43:58

Infocatcher
Not found
 
Группа: Extensions
Зарегистрирован: 24-05-2007
Сообщений: 4339
UA: Firefox 2.0

Re: JS не копирует в буфер обмена

Нет, нету.

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

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

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


Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела

Отсутствует

 

№1726-03-2008 10:49:34

Adobe
Участник
 
Группа: Members
Зарегистрирован: 25-03-2008
Сообщений: 16
UA: Minefield 3.0

Re: JS не копирует в буфер обмена

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

Отсутствует

 

№1826-03-2008 18:17:58

Infocatcher
Not found
 
Группа: Extensions
Зарегистрирован: 24-05-2007
Сообщений: 4339
UA: Firefox 2.0

Re: JS не копирует в буфер обмена

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

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

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

Выделить код

Код:

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

Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела

Отсутствует

 

№1930-03-2008 18:35:23

Unghost
Призрак-админ
 
Группа: Administrators
Откуда: Moscow, Russia
Зарегистрирован: 08-10-2004
Сообщений: 11771
UA: Minefield 3.0

Re: JS не копирует в буфер обмена

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


Do not meddle in the affairs of Wizards, for they are subtle and quick to anger.

Отсутствует

 

№2012-04-2008 01:11:11

BDSoft
Участник
 
Группа: Members
Зарегистрирован: 12-04-2008
Сообщений: 1
UA: Foxware 0.0

Re: JS не копирует в буфер обмена

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

Отсутствует

 

№2112-04-2008 01:21:21

sentaus
Участник
 
Группа: Members
Зарегистрирован: 03-06-2005
Сообщений: 759
UA: Google 2.1

Re: JS не копирует в буфер обмена

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

Отсутствует

 

Board footer

Powered by PunBB
Modified by Mozilla Russia
Copyright © 2004–2020 Mozilla Russia GitHub mark
Язык отображения форума: [Русский] [English]