Есть ли в Microsoft Edge эквивалент файла window.clipboardData? - PullRequest
0 голосов
/ 13 ноября 2018

В нашем приложении у нас есть пользовательская функция вставки, которая вызывает window.clipboardData.getData ("Text") для получения текущих данных буфера обмена.Затем он выполняет некоторые функции с этими данными.В Edge window.clipboardData не определен.Кажется, что getData работает, когда используется в событии "paste", хотя, например, следующее.

document.addEventListener("paste", function(e) {
    var test = e.clipboardData.getData("text/plain");
});

Я потенциально могу разработать обходной путь, который будет включать это переопределение события вставки, но это не будет-идеалом.Решение, которое может быть вызвано вне события, было бы предпочтительным.

Кроме того, я читал, что Edge не поддерживает API буфера обмена в какой-то момент, но я понимаю, что это исправлено, поэтому, пожалуйста, найдитечто-то конкретное, опровергающее текущую функциональность (e.clipboardData работает, но не эквивалентен существующему window.clipboardData, если это ваш ответ.

Ответы [ 2 ]

0 голосов
/ 14 ноября 2018

Как отметил Кайидо, невозможно получить доступ к вставленному контенту вне события вставки в Edge (и Chrome в этом отношении).

Пользователи ранее использовали пользовательское меню для щелчка правой кнопкой мыши, чтобы получить доступ "«Вставить из Excel» для замены содержимого в редактируемой сетке содержимым с разделителями табуляции из буфера обмена.Если window.clipboardData не определен, пользователь получил сообщение о том, что вы должны использовать стандартную вставку CTRL + V в этом браузере.

Затем я добавил слушателя, который по существу определил, был ли контент разделен табуляцией и обработанэто как «Вставка из Excel», тогда как другие макеты данных рассматриваются как стандартная «Вставка».Этого было достаточно для моего развертывания, но для других может оказаться целесообразным запустить окно подтверждения для подтверждения намерения.

document.getElementById(myGridID).addEventListener("paste", function(e) {
    var clipboardContent = window.clipboardData ? window.clipboardData.getData("Text") : (e.clipboardData ? e.clipboardData.getData("text/plain") : "");
    if(clipboardContent != null && clipboardContent.indexOf('\t') >= 0)
    {
        MyExcelPasteFunction(myGridID, clipboardContent);
        e.preventDefault();
    }
});
0 голосов
/ 13 ноября 2018

Edge, как и во всех современных браузерах, использует официальный ClipboardEvent :: clipboardData :

inp.onpaste = evt =>
  console.log(evt.clipboardData.getData('text'));
<input id="inp">

Иди с этим.Устаревшее и нестандартное window :: clipboardData следует использовать только как средство поддержки устаревших версий для более старых версий IE.

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

• Реализации не должны позволять сценариям создавать синтетические события буфера обмена для получения доступа к реальным данным буфера обмена (если пользователь не имеетнастроил это так).

...