- Откройте программу редактирования изображений, скопируйте изображение (не копируйте из браузера - я объясню, почему позже).
- Откройте 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 этого не делает. Как это работает?