wwf
8 天以前 938c3e5a587ce950a94964ea509b9e7f8834dfae
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
export async function writeTextToClipboard(text: string): Promise<void> {
  if (navigator.clipboard && navigator.clipboard.writeText)
    return navigator.clipboard.writeText(text)
 
  return fallbackCopyTextToClipboard(text)
}
 
async function fallbackCopyTextToClipboard(text: string): Promise<void> {
  const textArea = document.createElement('textarea')
  textArea.value = text
  textArea.style.position = 'fixed' // Avoid scrolling to bottom
  document.body.appendChild(textArea)
  textArea.focus()
  textArea.select()
  try {
    const successful = document.execCommand('copy')
    if (successful)
      return Promise.resolve()
 
    return Promise.reject(new Error('document.execCommand failed'))
  }
  catch (err) {
    return Promise.reject(convertAnyToError(err))
  }
  finally {
    document.body.removeChild(textArea)
  }
}
 
function convertAnyToError(err: any): Error {
  if (err instanceof Error)
    return err
 
  return new Error(`Caught: ${String(err)}`)
}