- Откройте программу редактирования изображений, скопируйте изображение (не копируйте из браузера - я объясню, почему позже).
- Откройте Firefox и перейдите в http://imgur.com
- Нажмите Ctrl + V
- Посмотрите с полным изумлением на изображение, которое вы скопировали перед загрузкой.
Я знаю о API буфера обмена HTML5, который отлично работает с Chrome. В Chrome, когда вы вставляете данные двоичного изображения, браузер запускает событие paste
, содержащее event.clipboardData.types
, которое равно ['Files']
, поэтому я могу получить свое изображение в буфере обмена с помощью
var index = event.clipboardData.types.indexOf('Files');
if(index !== -1) {
var blob = event.clipboardData.items[index].getAsFile();
}
В Firefox, когда я вставляю данные двоичного изображения, браузер также запускает событие вставки, но event.clipboardData.types
пуст (имеет length === 0
) и event.clipboardData.getData('Files')
возвращает явно ""
.
Кстати, копирование изображения из браузера также устанавливает элемент "text/html" в clipboardData
, который содержит скопированный элемент <img>
. Поэтому в этих случаях я мог бы решить проблему, отправив удаленный URL-адрес на сервер, который затем загрузил бы само изображение (если у сервера есть доступ к удаленному местоположению, что на самом деле не гарантировано).
StackOverflow предлагает следующее:
Как получить данные из буфера обмена в Firefox
(создайте contenteditable <div>
, попросите пользователя вставить в него и затем скопировать содержимое.)
Однако imgur этого не делает. Как это работает?