Как установить Image для clipboardData в событии oncopy

1

Я хочу реализовать ctrl + c событие в холсте (например, в художниках) из выбранного региона в буфер OS. На основании этого ответа я могу добавить copy слушателя и изменение данных в буфер обмена там - который прекрасно работает с текстом. Но я не могу найти, как разместить ImageData объект Image/ImageData. Здесь MDD копирует документацию и setData. Похоже, что в формате image/* ничего нет. Спецификация скважины ничего не говорит. Но я чувствую запах, если первый параметр, названный как format в setData должен быть способ разместить файл там.

Здесь, где я зашел так далеко:

document.addEventListener('copy', function(e) {
   var data = ctx.getImageData(params.left, params.top, params.width, params.height);
   var file = new File(data.data, "file.png", {type: "image/png"});
   e.clipboardData.items.add(file, 'image/png'); // This doesn't work, But it create the structure like on the image below(with items and types, but without FileList) 
   e.clipboardData.setDragImage(tool.img, 10, 10); // doesn't work 
   e.clipboardData.setData("image/png", tool.file); // doesn't work
   e.preventDefault(); 
})

Я также нашел метод setDragImage, я его реализовал, но после размещения Image он не появляется в буфере.

НОТА:

Когда я вставляю изображение из буфера обмена, мое событие "вставить" показывает структуру событий, как на изображении ниже, поэтому, я думаю, мне нужно создать что-то подобное. Изображение 174551

Есть идеи?

ps Я также знаю о document.execCommand('copy'); , но он не работает в хроме (по крайней мере, в моем случае), поэтому я не хочу его использовать.

Теги:
clipboard
clipboarddata

1 ответ

1

Говоря только из моих наблюдений и исследований:

  • Chrome не поддерживает тип "image/png", и это не формат, который требуется спецификацией API буфера обмена. (Ошибка Chrome.)

  • Firefox по крайней мере попытается поместить DataTransferItem с типом "image/png" в буфер обмена, но я еще не понял, какой формат данных использовать. (Base64 PNG, с или без data:image/png;base64, prefix, не работает, чтобы вставлять в PowerPoint и не использовать atob(<the base64 PNG without prefix>), насколько я экспериментировал.)

  • "text/html" требуется. Когда событие copy запускается в Документах Google, оно, как представляется, загружает изображение, а затем помещает фрагмент HTML в буфер обмена, который выглядит так:

    <meta charset="utf-8">
    <b style="font-weight:normal;" id="docs-internal-guid-abcdefg-abcd-abcd">
      <img src="https://lh4.googleusercontent.com/a-very-long-identifier" width="659px;" height="312px;" />
    </b>
    

    используя evt.clipboardData.setData("text/html", fragment). Затем, например, приложения Microsoft Office загружают это изображение и вставляют его в документ. Я не знаю, делает ли он то же самое в MacOS или Linux. URI данных, кстати, не работают как img src.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню