diff --git a/packages/uni-h5/src/service/api/device/clipboard.ts b/packages/uni-h5/src/service/api/device/clipboard.ts index 5239e34335c1da9ec3ea7a6626244d52cc9908a5..a67061c85d41e9131478e1da91570663fcd5e02a 100644 --- a/packages/uni-h5/src/service/api/device/clipboard.ts +++ b/packages/uni-h5/src/service/api/device/clipboard.ts @@ -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( 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( export const setClipboardData = defineAsyncApi( 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() + } +}