提交 1097cd02 编写于 作者: D DCloud_LXH

feat(h5): uni.setClipboardData degraded processing

上级 3f79f5d7
......@@ -7,10 +7,10 @@ import {
SetClipboardDataProtocol,
defineAsyncApi,
} from '@dcloudio/uni-api'
import { showModal } from '../../api/ui/popup/showModal'
// import { showModal } from '../../api/ui/popup/showModal'
import {
useI18n,
initI18nSetClipboardDataMsgsOnce,
// initI18nSetClipboardDataMsgsOnce,
initI18nGetClipboardDataMsgsOnce,
} from '@dcloudio/uni-core'
......@@ -23,7 +23,9 @@ export const getClipboardData = defineAsyncApi<API_TYPE_GET_CLIPBOARD_DATA>(
const data = await navigator.clipboard.readText()
resolve({ data })
} catch (error: any) {
reject(`${error} ${t('uni.getClipboardData.fail')}`)
_getClipboardData(resolve, () => {
reject(`${error} ${t('uni.getClipboardData.fail')}`)
})
}
}
)
......@@ -31,20 +33,44 @@ export const getClipboardData = defineAsyncApi<API_TYPE_GET_CLIPBOARD_DATA>(
export const setClipboardData = defineAsyncApi<API_TYPE_SET_CLIPBOARD_DATA>(
API_SET_CLIPBOARD_DATA,
async ({ data }, { resolve, reject }) => {
initI18nSetClipboardDataMsgsOnce()
const { t } = useI18n()
try {
await navigator.clipboard.writeText(data)
resolve()
} catch (error) {
reject()
showModal({
title: t('uni.setClipboardData.fail'),
content: data,
editable: true,
})
_setClipboardData(data, resolve, reject)
}
},
SetClipboardDataProtocol,
SetClipboardDataOptions
)
function _getClipboardData(resolve: Function, reject: Function) {
const pasteText = document.getElementById('#clipboard') as HTMLInputElement
const data = pasteText ? pasteText.value : undefined
if (data) {
resolve({ data })
} else {
reject()
}
}
function _setClipboardData(data: string, resolve: Function, reject: Function) {
const pasteText = document.getElementById('#clipboard')
pasteText && pasteText.remove()
const textarea = document.createElement('textarea')
textarea.id = '#clipboard'
textarea.style.position = 'fixed'
textarea.style.top = '-9999px'
textarea.style.zIndex = '-9999'
document.body.appendChild(textarea)
textarea.value = data
textarea.focus()
textarea.select()
const result = document.execCommand('Copy', false)
textarea.blur()
if (result) {
resolve()
} else {
reject()
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册