2009-12-23 4 views
6

Я знаю, что этот вопрос задавали, как миллион раз, но я не мог найти подходящее современное решение.Скопируйте/Вставьте в JavaScript?

Я внедрил свое собственное меню, чтобы предоставить пользователю возможность вырезать, копировать и вставлять в мой WebApp. Но я не уверен, как на самом деле работать с буфером обмена в Firefox, IE, Safari/Chrome.

Благодарим за помощь.

ответ

1

сделал у попытаться: http://ericphan.info/development/cross-browser-copy-and-paste-with-jquery-copy/

UPDATE: ссылка не доступна, так что я скопировать содержимое из кэша:

сценарию

Я работал на клиентском проекте для SSW когда это клиент сообщил об ошибке в веб-приложении.

Ошибка связана с динамически созданной ссылкой mailto, которая обновилась при выборе нескольких сотрудников. Клиент сообщал об ошибке, когда выбрал более 10 сотрудников для отправки по электронной почте. Его Lotus Notes почтовый клиент появился ошибку говоря:

Ошибка аргументы командной строки обработки

Testing это сам я обнаружил, что Outlook 2007 может легко поддерживать электронную почту 30-40 сотрудников перед ссылкой MailTo перестал работать. Причина:

Оказалось, что спецификация mailto имеет ограничение, и у почтовых клиентов также есть предел. Lotus Notes обрабатывает только 240 символов в ссылке mailto и других современных почтовых клиентах, таких как Outlook 2007, поддерживает 2083 символа - максимальная длина URL-адреса

Это объясняет несоответствие при тестировании. Исправление - JQuery на помощь

Поскольку это ограничение спецификации HTML, нам нужно другое решение, отвечающее требованию клиента «Я хочу, чтобы иметь возможность выбирать нескольких сотрудников и отправлять электронную почту всем им»,

Мы могли бы создать форму электронной почты, использующую SMTP для отправки электронной почты, но клиент хотел использовать Lotus Notes в качестве почтового клиента.

Мы закончили тем, что изменили кнопку «электронная почта», чтобы скопировать все электронные письма (разделенные запятой) в буфер обмена и открыли новое окно электронной почты. Весь клиент должен был нажать CTRL + V и вставить электронные письма в поле TO. Это было самое быстрое и экономически эффективное решение, которое давало клиенту гибкость в использовании собственного почтового клиента.

Плагин JQuery, называемый jquery.copy, который предоставил кросс-браузерную копию и вставить с помощью файла flash (swf). Это похоже на то, как работает ярлык синтаксиса в моем блоге.

После того, как вы ссылаетесь файл в jquery.copy.js все, что вам нужно сделать, чтобы перенести данные в буфер обмена выполняется следующее:

$.copy("some text to copy"); 

легко и приятно;)

Примечание: вы можете необходимо изменить путь к SWF-файлу в jquery.copy.js, чтобы заставить это работать

+2

И, из этого сообщения в блоге, zeroclipboard выглядит хорошо - http://code.google.com/p/zeroclipboard/ –

+0

dan спасибо за ваш комментарий :) –

+0

Кажется, он закрывает копию в буфер обмена, но я действительно нужна функциональность пасты из буфера обмена ... – thedp

7

Я только что написал подробный технический blog post по этому вопросу (я работаю для Lucidchart, и мы недавно сделали капитальный ремонт в нашем буфере обмена). Включенный в сообщение this fiddle, который является рабочим примером копирования и вставки через Javascript.

Хорошей новостью является то, что этот пример дает вам рабочий код для установки/получения любых поддерживаемых типов данных буфера обмена всякий раз, когда пользователь использует горячую клавишу буфера обмена.

Плохая новость заключается в том, что использование собственного контекстного меню для копирования и вставки является проблематичным. Даже Google не может обойти это (попробуйте использовать контекстное меню для копирования или вставки в Google Docs в Firefox). Вы сможете заставить его работать без особых проблем в IE. Это потому, что вы можете получить доступ к объекту clipboardData в любое время из Javascript через:

window.clipboardData 

(При попытке сделать это вне разреза системы, копирование или событие вставки, однако, IE предложит пользователю предоставить разрешение веб-приложения для буфера обмена.)

В Chrome вы можете создать расширение хром, которое даст ваше веб-приложение clipboard permissions (это то, что мы делаем для Lucidchart). Тогда для пользователей с вашим расширением Installed вам просто нужно стрелять системные события самостоятельно при нажатии на пункте меню:

document.execCommand('copy'); 

Это выглядит как Firefox имеет some options, что позволяет пользователям предоставлять разрешения на определенные сайты, чтобы получить доступ к буфер обмена, но я не пробовал ни одного из них лично.

Смежные вопросы