Доступ к буферу обмена с использованием Javascript - без Flash?

Есть ли надежный способ доступа к буферу обмена клиентского компьютера с помощью Javascript? Я продолжаю сталкиваться с проблемами с разрешениями при попытке сделать это. Как это делают в Google Документах? Они используют Flash?

Моя основная цель - IE8, но я также хотел бы поддерживать FF и Chrome.

Я видел, как это можно сделать с помощью Flash, но ищу чистый js-маршрут:
Доступ к буферу обмена с помощью Flash


person Chris Ballance    schedule 09.11.2009    source источник


Ответы (8)


Поскольку это большой риск для безопасности, все браузеры, которые заботятся о безопасности, не разрешают JS доступ к буферу обмена.

Основная причина заключается в том, что многие люди помещают свои пароли в текстовый файл, а затем используют вырезание и вставку для входа в систему. Затем взломщики могут собрать пароль (и, возможно, другую личную информацию, такую ​​как текстовый документ, который вы только что скопировали) из буфера обмена, взломав популярный сайт и установив некоторый JS, который отправляет им содержимое буфера обмена.

Вот почему у меня постоянно отключена вспышка.

person Aaron Digulla    schedule 09.11.2009
comment
Вы знаете, что Flash ›= 10 (на самом деле, я думаю, что это действительно последняя версия 9, но что угодно) ограничивает весь доступ к буферу обмена действиями, в которых участвует пользователь - если только вы НАПРЯМУЮ не нажмете кнопку или не нажмете ключ (пока SWF активен), вы в полной безопасности. - person cwallenpoole; 10.11.2009
comment
Вот почему взломщики помещают флеш-память перед чем-то на странице, которое выглядит как ссылка, но на самом деле является текстом, просто оформленным таким образом. Когда пользователи переходят по ссылке, они активируют вспышку. - person Aaron Digulla; 10.11.2009
comment
Я просто слежу за последними сообщениями о мошенничестве. Clickjacking уже исполнился год (searchsecurity.techtarget.com/news / article /). - person Aaron Digulla; 18.11.2009
comment
Было бы удобно разрешить запись в буфер обмена без чтения, поскольку 90% веб-сайтов хотят, чтобы ссылки было проще копировать в буфер обмена. - person Asaf; 03.01.2013

Нет, не в FF и Chrome. Он работает в IE (не уверен насчет 7 и 8, но определенно 6), и от Flash. Вот почему всегда используется Flash.

person Marius    schedule 09.11.2009

Забудьте чистый JS.

Стандартного API для доступа к буферу обмена не существует, а некоторые браузеры реализуют собственный метод.

Вспышка - это «стандартный» метод.

person Quentin    schedule 09.11.2009

Вы ищете функцию execCommand, по крайней мере, лучшее, что я могу сказать. Вот некоторые ресурсы: Вставить текст в contenteditable div Javascript http://www.java2s.com/Code/JavaScriptReference/Javascript-Methods/execCommandisappliedto.htm

К сожалению, это наталкивается на ту же лазейку в безопасности, которую Flash запечатал во Flash 9. Поскольку люди рассылали спам в буфер обмена, буфер обмена теперь доступен только при прямом взаимодействии с пользователем, и, честно говоря, так лучше. Бьюсь об заклад, что большинство браузеров имеют похожие (если не более строгие правила).

person cwallenpoole    schedule 09.11.2009

В IE это сделать довольно безболезненно. Для Firefox вам необходимо обновить users.js и / или prefs.js (вы можете использовать Google для доступа к буферу обмена в Firefox). Для Chrome нужно написать расширение.

В вашем расширении background_page имейте заполнитель (IFrame) на вашей веб-странице, имейте кнопки или ссылки, такие как «вырезать», «копировать» и «вставить». также установите на своей странице скрытый iframe paste_holder, чтобы вернуть текст, прочитанный background_page вашего расширения. В файле манифеста вашего расширения укажите следующий код:

manifest.json

"background_page": "mypaste_helper.html",
"content_scripts": [
    {
        "matches": ["<all_urls>"],
        "js": ["mypaste_helper.js"],
        "all_frames": true
    }
],
"permissions": [
    "clipboardRead",
    "clipboardWrite",
    "tabs"  
]

mypaste_helper.js

получить ссылки на ваши кнопки вырезать, скопировать и скопировать на странице

cutButton.addEventListener("click", function() 
{
            get selected content using window.getSelection()
            pass that text to handleCut function in mypaste_helper.html     
}, false);      
copyButton.addEventListener("click", function() 
{
            get selected content using window.getSelection()
            pass that text to handleCopy function in mypaste_helper.html 
}, false);      
pasteButton.addEventListener("click", function() 
{
            get content from handlePaste function in mypaste_helper.html 
}, false);    

в функции обратного вызова

получить содержимое, отправленное функцией background_page, установить innerHTML фрейма paste_holder document.body с полученным текстом.

mypaste_helper.html

handleCopy и handleCut идентичны

get reference to your iframe document.body as clipboardholder
set innerHTML of the clipboardholder.contentDocument.body with the data passed by mypaste_helper.js
capture selection through window.getSelection()
selection.selectAllChildren(clipboardholder);
document.execCommand('copy')
read contents of the clipboardholder
pass the text back to callback in mypaste_helper.js

handlePaste

get reference to your iframe document.body as clipboardholder
you may want to clear the contents of clipboardholder.contentDocument.body
capture selection through window.getSelection()
selection.selectAllChildren(clipboardholder);
document.execCommand('paste')
read contents of the clipboardholder
pass the text back to callback in mypaste_helper.js
person Surya Upadhyayula    schedule 26.09.2011
comment
Но есть ли способ получить данные из внешнего (вне браузера) буфера обмена? - person Shimmy Weitzhandler; 15.03.2012

http://www.rodsdot.com/ee/cross_browser_clipboard_copy_with_pop_over_message.asp реализует ZeroClipboard. Flash объект правильно и кроссбраузерен. Также обсуждаются потенциальные проблемы с ZeroClipboard и возможные обходные пути. Также совместим с Flash 10+.

person rdivilbiss    schedule 25.06.2010

Вот чистая реализация JS, которая позволяет вставлять данные изображения, работающие в Google Chrome: http://strd6.com/2011/09/html5-javascript-pasting-image-data-in-chrome/

person Daniel X Moore    schedule 21.09.2011

Эта проблема была очевидна, но у меня все еще есть сомнения, потому что есть возможность сделать это в javascript, а еще одна вещь - для форм Windows, это вполне возможно сделать с помощью команды

Clipboard.Clear()

Ссылка: System.Windows. Формы

Любое вредоносное ПО, которое может хорошо себя вести.

person Fernando Arce    schedule 05.11.2014