Страницы: 1
Привет всем!
Вот хочу спросить у знающих людей:
У меня есть 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:
И Что самое интересное: на IE работает отлично, а вот в Mozilla - нет
Подскажите пожалуйста, в чем проблема? Может быть параметры безопасности браузера как то влияют?
Спасибо.
по соображениям безопасности не поддерживается в fx копирование в буффер обмена со страниц
по соображениям безопасности не поддерживается в fx копирование в буффер обмена со страниц
Получается, что в Mozilla вообще никак не реализовать копирование текста в буфер обчена?
Почему же..реализовать можно
Необходимо, чтобы у пользователя стояло расширение NoScript и было разрешено "работа с буффером обмена на доверенных сайтах"
Свобода только тут - mozilla@conference.jabber.ru
Отсутствует
Кстати, есть варианты с буфером:
http://forum.mozilla-russia.org/uploade … .0.3.1.zip – см. функцию doClipboard и clipboard.swf
(стащил из кода какого-то теста – там можно было результаты скопировать)
Отредактировано Infocatcher (24-03-2008 21:47:50)
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
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 (25-03-2008 16:27:12)
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
Infocatcher
А clipboard.swf надо на саму страницу выносить? А то у меня не работает
Видите дело то в чем, у меня обычная таблица из 2-х столбцов и множества строк с одновродной инфой,
В 1-м столбце у меня кнопка которая будет копировать то что стоит рядом (во 2-м столбце)
Но это не суть важно т.к. при нажатии на кнопку, она вызывает функцию и говорит ей что заносить в буфер все это дело средствами php, только что копирование в буфер мне надо через JS
Отредактировано Adobe (25-03-2008 20:24:17)
Отсутствует
А clipboard.swf надо на саму страницу выносить?
Файл должен находиться где-нибудь на сервере. А в src надо прописать ссылку на него.
Скрипт при первом использовании копирования добавит clipboard.swf на страницу.
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
Infocatcher
Ну clipboard.swf у меня лежит рядом со скриптом
Вызов происходит нажатием кнопки:
Странно, не работает почему то, и консоль ошибок молчит
Добавлено 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 копируется (этим же скриптом)?
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
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> есть?
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
Нет, нету.
Значит или это глюк, или скрипт неправильно скопирован...
Дк получается, что в буфер копируется, все что расположено на 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>";
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
Страницы: 1