window.clipboardData не определен в Microsoft Edge - PullRequest
0 голосов
/ 23 октября 2019

Я пытаюсь разрешить пользователям копировать данные из сетки данных из браузера. Это не работает в Microsoft Edge. Кажется, что _window.clipboardData возвращает неопределенное значение, когда я печатаю его в Microsoft Edge.

У меня были операторы печати, показывающие, что window.navigator.clipboard и _window.clipboardData оба не определены. Почему _window.clipboardData возвращает undefined?

Я использовал _window, потому что с window.clipboardData я получаю эту ошибку: Свойство 'clipboardData' не существует для типа 'Window & typeof globalThis'.ts

copyData(event: KeyboardEvent){
/*OTHER CODE*/
  if (window.navigator.clipboard) {
    windowNavigator.clipboard.writeText(data);
  } else {
    data = data.substring(0, data.length-1); //remove newline for Edge andIE
    const _window = window;
    _window.clipboardData.setData("text", data);
  }
}

1 Ответ

0 голосов
/ 24 октября 2019

Вы можете использовать event.clipboardData вместо window.clipboardData, см. Следующий код:

Код на html-странице:

<div class="source"  (copy)="oncopyData($event)" contenteditable="true">Try copying text from this box...</div>
<div class="target" (paste)="onPaste($event)" contenteditable="true">...and pasting it into this one</div>

Код в компоненте. TS файл:

  oncopyData(event: ClipboardEvent){
    const selection = document.getSelection();
    event.clipboardData.setData('text/plain', "Copy function: " + selection.toString().toUpperCase() );
    event.preventDefault();
  }
  onPaste(event:ClipboardEvent){
    let paste = (event.clipboardData).getData('text');
    paste = "Paste function: "+paste.toUpperCase();

    const selection = window.getSelection();
    if (!selection.rangeCount) return false;
    selection.deleteFromDocument();
    selection.getRangeAt(0).insertNode(document.createTextNode(paste));

    event.preventDefault();
  }

Результат, как показано ниже (с использованием версии Microsoft Edge 44.18362):

enter image description here

...