Мой клиент часто получает электронные письма в Outlook со скриншотами, встроенными в текст. Я создаю им веб-сайт для отслеживания заказов на работу, и они хотят скопировать / вставить из электронного письма в веб-страницу, которую я создаю. (Они используют Chrome Версия 79.0.3945.117 (Official Build) (64-bit)
и Microsoft Office 365 ProPlus Outlook Версия 1902 (Build 11328.20492 Click-to-Run))
Когда они выбирают весь контент электронной почты, данные в e.clipboardData.items
не содержат никаких ссылок на изображение. Он включает в себя только текст (в обычном, rte и html форматах), а коллекция файлов имеет длину 0.
Когда они выбирают одно изображение в Outlook и копируют / вставляют его в мою форму, данные в e.clipboardData.items
включают в себя rte, html и типы файлов. Однако коллекция файлов по-прежнему имеет длину 0. Когда я пытаюсь вызвать getAsFile()
для элемента с типом файла (и типом изображения / png ) он возвращает null
.
Если клиент щелкнет правой кнопкой мыши по изображению и сохранит его, они могут загрузить его на мой элемент управления input type=file
, но я пытаюсь сэкономить им некоторые усилия, поскольку они делают это несколько раз в день.
У меня есть текстовое поле с событием onpaste
:
<textarea name="maincontent_0$txtDetails" rows="2" cols="20" id="maincontent_0_txtDetails" class="orderFormDetails" onpaste="onPaste(event)"></textarea>
и элементом управления вводом файла:
<input type="file" name="maincontent_0$fuNewAttachment" id="maincontent_0_fuNewAttachment">
onpaste
Событие определяется следующим образом:
function onPaste(e)
{
var items = e.clipboardData.items;
const dT = new ClipboardEvent('').clipboardData || // Firefox < 62 workaround exploiting https://bugzilla.mozilla.org/show_bug.cgi?id=1422655
new DataTransfer();
for (var i = 0; i < items.length; i++)
{
if (items[i].kind == "file")
{
var blob = items[i].getAsFile();
if (blob != null)
{
dT.items.add(blob);
}
}
}
if (dT.items.length > 0)
{
var uploadField = document.getElementById("maincontent_0_fuNewAttachment");
uploadField.files = dT.files;
}
}
Если я Из данных html вместо данных файла я могу получить место на жестком диске пользователя, где кэшируется изображение, но это бесполезно для меня, так как я не могу получить фактическое содержимое файла.
I Также пытались использовать перетаскивание, чтобы загрузить изображение из Outlook и столкнуться с аналогичной проблемой (коллекция e.dataTransfer.files
пуста, а коллекция e.dataTransfer.items
содержит только html с локальным URL-адресом изображения, а не его содержимым. .)
Что я могу сделать, чтобы получить доступ к содержимому изображения, или Outlook просто не отправляет его?