From 5ec654a6d54a12b07031000366c9daec73a43ced Mon Sep 17 00:00:00 2001 From: Lumdzeehol Date: Tue, 25 Oct 2022 13:38:50 +0800 Subject: [PATCH] feat(useClipboard): support legacy copy (#2336) Co-authored-by: zhihao.lin@mobvista.com --- packages/core/useClipboard/index.ts | 46 ++++++++++++++++++++++++----- 1 file changed, 39 insertions(+), 7 deletions(-) diff --git a/packages/core/useClipboard/index.ts b/packages/core/useClipboard/index.ts index c532be61522..fd7b00fbdf9 100644 --- a/packages/core/useClipboard/index.ts +++ b/packages/core/useClipboard/index.ts @@ -3,7 +3,7 @@ import type { MaybeComputedRef } from '@vueuse/shared' import { resolveUnref, useTimeoutFn } from '@vueuse/shared' import type { ComputedRef, Ref } from 'vue-demi' -import { ref } from 'vue-demi' +import { computed, ref } from 'vue-demi' import type { WindowEventName } from '../useEventListener' import { useEventListener } from '../useEventListener' import { useSupported } from '../useSupported' @@ -29,6 +29,13 @@ export interface UseClipboardOptions extends ConfigurableNavigator { * @default 1500 */ copiedDuring?: number + + /** + * Whether fallback to document.execCommand('copy') if clipboard is undefined. + * + * @default false + */ + legacy?: boolean } export interface UseClipboardReturn { @@ -52,19 +59,25 @@ export function useClipboard(options: UseClipboardOptions navigator && 'clipboard' in navigator) + const isClipboardApiSupported = useSupported(() => (navigator && 'clipboard' in navigator)) + const isSupported = computed(() => isClipboardApiSupported.value || legacy) const text = ref('') const copied = ref(false) - const timeout = useTimeoutFn(() => copied.value = false, copiedDuring) function updateText() { - navigator!.clipboard.readText().then((value) => { - text.value = value - }) + if (isClipboardApiSupported.value) { + navigator!.clipboard.readText().then((value) => { + text.value = value + }) + } + else { + text.value = legacyRead() + } } if (isSupported.value && read) { @@ -74,13 +87,32 @@ export function useClipboard(options: UseClipboardOptions,