clipboard apiはtext/plainとtext/htmlしかsetできない
w3cにはjsonやxmlなどのタイプが存在する
const data = [
new ClipboardItem({
'text/plain': new Blob([assembled.text], {
type: 'text/plain',
}),
'text/html': new Blob([`<ul>${assembled.html}</ul>`], {
type: 'text/html',
}),
'text/opml': new Blob([
`<?xml version="1.0" encoding="utf-8"?>
<opml version="2.0">
<head>
<title></title>
<flavor>dynalist</flavor>
<source>https://dynalist.io</source>
</head>
<body></opml>`,
]),
}),
]
navigator.clipboard.write(data)
Uncaught (in promise) DOMException: Type text/opml not supported on write.
が出る
どうするのか?
古のdocument.execCommand('copy')
を使う
code:oncopy.js
const someFunc = () => {
document.execCommand('copy')
}
const onCopy = (e: React.ClipboardEvent) => {
e.preventDefault()
const clipboardData = e.clipboardData
if (!clipboardData) {
alert('this browser does not work ClipboardData')
return
}
if (clipboardDataRef.current) {
console.log(clipboardDataRef.current)
clipboardData.setData('text/plain', clipboardDataRef.current.text)
clipboardData.setData('text/html', clipboardDataRef.current.html)
clipboardData.setData('text/opml', clipboardDataRef.current.opml)
clipboardDataRef.current = null
}
}