jtwjs Dev Wiki
  • DEV_ROAD
    • πŸ’ͺ🏻 μƒμ‘΄ν•˜κΈ°
    • Week 1
      • 개발 ν™˜κ²½ μ„ΈνŒ…
      • νƒ€μž…μŠ€ν¬λ¦½νŠΈ
      • λ¦¬μ—‘νŠΈ
      • Testing Library
      • Parcel & ESLint
    • Week 2
      • JSX
      • Virtual DOM
    • Week 3
      • React Component
      • React State
    • Week 4
      • Express
      • Fetch API & CORS
      • React Hook
      • useRef & Custom Hook
    • Week 5
      • TDD
      • React Testing Library
      • MSW
      • Playwrite
      • Snapshot
    • Week 6
      • Separtion of Concerns
      • Principle
      • DI, (Dependency Injection)
      • Reflect-metadata
      • TSyringe
      • External Store
      • Follow Redux
      • usestore-ts
      • useSyncExternalStore
    • Week 7
      • Routing
      • Routes
      • Router
      • Navigation
    • Week 8
      • Design System
      • Style Basics
      • CSS-in-JS
      • Styled-Components
      • Global Style & Theme
    • Week 9
      • κ°œλ°œν•˜κΈ° μ „ μ€€λΉ„
      • μƒν’ˆ λͺ©λ‘ νŽ˜μ΄μ§€
      • μƒν’ˆ 상세 νŽ˜μ΄μ§€
      • μž₯λ°”κ΅¬λ‹ˆ νŽ˜μ΄μ§€
    • Week 10
      • 둜그인
      • λ‘œκ·Έμ•„μ›ƒ
      • νšŒμ›κ°€μž…
      • μ£Όλ¬Έ λͺ©λ‘ & μ£Όλ¬Έ 상세
    • Week 11
      • 배솑 정보 μž…λ ₯
      • ν¬νŠΈμ› 결제 μš”μ²­
      • 배솑 및 결제 정보 전달
    • Week 12
      • κ΄€λ¦¬μž μ›Ήμ‚¬μ΄νŠΈκ°œλ°œμ‹œμž‘
  • DEV_NOTE
    • TypeScript
      • 기본적 문법
        • Enum
        • λ‹€ν˜•μ„±
          • Untitled
        • ꡬ쑰적 타이핑
        • μ œλ„ˆλ¦­ νƒ€μž…
        • 컨디셔널 νƒ€μž…
        • ν•¨μˆ˜ λ©”μ„œλ“œ 타이핑
        • infer둜 νƒ€μž…μŠ€ν¬λ¦½νŠΈμ˜ μΆ”λ‘  직접 ν™œμš©
        • μž¬κ·€ νƒ€μž…
        • ν…œν”Œλ¦Ώ λ¦¬ν„°λŸ΄ νƒ€μž…
        • 좔가적인 νƒ€μž… 검사 satisfies μ—°μ‚°μž
        • νƒ€μž…μŠ€ν¬λ¦½νŠΈ 건망증
        • μ›μ‹œ μžλ£Œν˜•μ—λ„ λΈŒλžœλ”© 기법 μ‚¬μš© κ°€λŠ₯
        • νƒ€μž… 쒁히기
        • μœ μš©ν•œ νƒ€μž… λ§Œλ“€κΈ°
        • λ°μ½”λ ˆμ΄ν„° ν•¨μˆ˜
        • μ•°λΉ„μ–ΈνŠΈ 선언도 μ„ μ–Έ 병합이 λœλ‹€.
        • μ•°λΉ„μ–ΈνŠΈ 선언도 선언병합이 λœλ‹€.
    • Testing
      • Unit Testing
      • λ‹¨μœ„ ν…ŒμŠ€νŠΈμ˜ 두 λΆ„νŒŒ
      • 쒋은 λ‹¨μœ„ ν…ŒμŠ€νŠΈλ₯Ό κ΅¬μ„±ν•˜λŠ” 4λŒ€ μš”μ†Œ
      • ν…ŒμŠ€νŠΈ λŒ€μ—­κ³Ό 식별할 수 μžˆλŠ” λ™μž‘
      • λ‹¨μœ„ ν…ŒμŠ€νŠΈ μŠ€νƒ€μΌ
      • κ°€μΉ˜ μžˆλŠ” λ‹¨μœ„ ν…ŒμŠ€νŠΈλ₯Ό μœ„ν•œ λ¦¬νŒ©ν† λ§
      • 톡합 ν…ŒμŠ€νŠΈ
      • Cross Browsing Testing
      • κΈ°λŠ₯ ν…ŒμŠ€νŠΈ μ’…λ₯˜
      • React Testing Pattern
      • ν”„λ‘ νŠΈμ—”λ“œ ν…ŒμŠ€νŠΈ μž…λ¬Έ
        • ν…ŒμŠ€νŠΈ λ²”μœ„
        • λ‹¨μœ„ ν…ŒμŠ€νŠΈ 검증
        • Mock
        • UI μ»΄ν¬λ„ŒνŠΈ ν…ŒμŠ€νŠΈ
        • ν…ŒμŠ€νŠΈ 컀버리지
        • μ›Ή 톡합 ν…ŒμŠ€νŠΈ
        • MSW
        • μŠ€ν† λ¦¬λΆ
        • μ‹œκ°μ  νšŒκ·€ ν…ŒμŠ€νŠΈ
        • E2E ν…ŒμŠ€νŠΈ
        • Github Actions μ„€μ •
        • κΉƒν—ˆλΈŒ μ•‘μ…˜μ—μ„œ E2E
      • μ‹œν”„νŠΈ λ ˆν”„νŠΈ
        • ν…ŒμŠ€νŠΈ κΈ°λ³Έμ€‘μ˜ κΈ°λ³Έ
        • λ‹¨μœ„ ν…ŒμŠ€νŠΈ
        • μ½”λ“œ λ³΅μž‘λ„
        • λ¦¬νŒ©ν„°λ§
        • μ½”λ“œ 리뷰
        • 톡합 ν…ŒμŠ€νŠΈ νŒ¨ν„΄
        • μ‹œμŠ€ν…œ ν…ŒμŠ€νŠΈμ˜ μžλ™ν™”
        • 탐색적 ν…ŒμŠ€νŠΈ
      • Test Tip
      • vitest
      • playwright
      • Test Data Generator
      • MSW
    • Algorithm
      • coding test
      • Data Structure
    • Next.js
      • Data Fetching
      • Hydration
      • Next 13
      • Optimization
      • Next 15
    • Tailwind
      • Tailwind CSS
      • Theme
      • Directives
      • Tool
      • Design System
    • Storybook
      • Storybook
      • CSF3
      • CDD
      • Headless Component
    • Funtional Programming
      • ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ°
      • μ°Έμ‘° 투λͺ…μ„±
      • λΆ€μˆ˜νš¨κ³Ό
      • ν•¨μˆ˜ ν•©μ„±
      • μ œλ„ˆλ¦­ νƒ€μž… ν™œμš©ν•˜κΈ°
      • 암묡적 μž…μΆœλ ₯
      • μ•‘μ…˜κ³Ό 계산, 데이터
      • κ³„μΈ΅ν˜• 섀계
      • 호좜 κ·Έλž˜ν”„
      • ν•¨μˆ˜ν˜• 섀계
      • λΆˆλ³€μ„±
      • 일급 ν•¨μˆ˜
      • ν•¨μˆ˜ν˜• 도ꡬ
    • Git
      • Github Actions
      • Conflict
      • Branch μ „λž΅
    • Contents Format
      • Audio
    • 3D Graphic
      • 3D keyword
      • Three.js
      • Geometry
      • Material
      • Light
      • Camera
      • Decal
      • Rotation
      • Text
      • Shadow
      • Fog
      • Post Processing
      • Animation
      • Math
        • Vector Space
        • λ²‘ν„°μ˜ μ—°μ‚°
        • νšŒμ „ 계산
      • 3D 컨텐츠가 λ§Œλ“€μ–΄μ§€λŠ” κ³Όμ •
      • R3F
      • Env
      • Scene
      • Transform
      • R3F
      • Interaction & Raycast
      • Rendering Algorithnm
      • Blender
      • Blender
    • Accessibility
      • μ ‘κ·Όμ„±μ΄λž€
    • Interactive Web
      • Parallax
      • Canvas
      • requestAnimationFrame
      • Effect
      • HSL
      • React.js + Canvas
      • Matter.js
    • AWS
      • DevOps
      • Amplify
      • S3
      • ν΄λΌμš°λ“œ μ»΄ν“¨νŒ…
        • μ˜¨ν”„λ ˆλ―ΈμŠ€μ™€ ν΄λΌμš°λ“œ
        • ν΄λΌμš°λ“œ λ„μž…νš¨κ³Ό
        • ν΄λΌμš°λ“œ μ»΄ν“¨νŒ…μ˜ λ²”μœ„
        • μ»΄ν“¨νŒ… μ˜΅μ…˜
          • EC2 - Virtual Machin
          • ECS, EKS - Container
          • Lambda - Serverless
        • λ„€νŠΈμ›Œν¬ 가상화
        • μŠ€ν† λ¦¬μ§€
        • λ°μ΄ν„°λ² μ΄μŠ€
        • 데이터 μˆ˜μ§‘
        • λ¨Έμ‹  λŸ¬λ‹ μ˜μ—­
        • IoT μ˜μ—­
        • 블둝체인 μ˜μ—­
      • ν΄λΌμš°λ“œ μ•„ν‚€ν…μ²˜ 섀계
    • Network
      • Web Server & WAS
    • System Design
      • System Design
      • Component
      • μ˜μ‘΄μ„±μ„ λ°°μ œν•œ 개발
      • Error Handling
      • Architecture
        • λͺ¨λ…Έλ‘œν‹± μ•„ν‚€ν…μ²˜
        • Clean Architecture
        • Layered Architecture
        • 이벀트 기반 μ•„ν‚€ν…μ²˜
      • 상황을 νŒŒμ•…ν•˜λŠ” 메타인지
      • 쀑볡 문제 ν•΄κ²°ν•˜κΈ°
      • Monorepo Arhitecture
        • λͺ¨λ…Έλ ˆν¬ 운영과 νŠΈλŸ¬λΈ”μŠˆνŒ…
        • Module Federation
      • μ½”λ“œ 병λͺ©μ§€μ 
      • API λŒ€μ‘
      • 곡톡 μ½”λ“œ
      • Infra ꡬ좕
      • λͺ¨λ“ˆ 기반의 개발 방식
      • Design System
        • μ΅œμ†Œ μˆ˜μ€€μ˜ μ•„ν‚€ν…μ²˜ μ„€μ •
        • 더 효율적인 λ””μžμΈμ‹œμŠ€ν…œ λ§Œλ“€κΈ°
        • λ””μžμΈ μ‹œμŠ€ν…œκ³Ό UI 라이브러리 λͺ©μ 
        • λ””μžμΈ 토큰
      • 효율적인 업무
        • 업무 ν”„λ‘œμ„ΈμŠ€ 병λͺ© νŒŒμ•…
      • Clean Code
      • Design Pattern
        • CQRS Pattern
        • Strangler Fig Pattern
        • λ°μ½”λ ˆμ΄ν„° νŒ¨ν„΄
        • μ»€λ§¨λ“œ νŒ¨ν„΄
        • μ „λž΅ νŒ¨ν„΄
        • μ˜΅μ €λ²„ νŒ¨ν„΄
      • A/B ν…ŒμŠ€νŒ…
      • λŒ€κ·œλͺ¨ λ¦¬μ—‘νŠΈ μ›Ήμ•± 개발
        • λ³΅μž‘μ„± 관리
        • λͺ¨λ“ˆμ„±
        • μ„±λŠ₯
        • λ””μžμΈ μ‹œμŠ€ν…œ
        • 데이터 패칭
        • μƒνƒœ 관리
        • κ΅­μ œν™”
        • μ½”λ“œ μ‘°μ§ν™”ν•˜κΈ°
        • κ°œμΈν™” A/B ν…ŒμŠ€νŒ…
        • ν™•μž₯ κ°€λŠ₯ν•œ μ›Ή μ•„ν‚€ν…μ²˜
        • ν…ŒμŠ€νŒ…
        • 툴링
        • 기술적 λ§ˆμ΄κ·Έλ ˆμ΄μ…˜
        • νƒ€μž…μŠ€ν¬λ¦½νŠΈ
        • λΌμš°νŒ…
        • μ‚¬μš©μž 쀑심 API λ””μžμΈ
        • λ¦¬μ•‘νŠΈ 미래
    • Performance
      • React DevTools
      • Component μ΅œμ ν™”
      • Page Load
      • API
    • MFA
      • MSA
      • MFA λ„μž…ν•˜κΈ°
      • Monorepo
        • Monorepo Tool
        • Yarn Berry Workspace
        • Turborepo
      • MFA Composition
      • SPA 톡합
      • Design System
      • Package Manager
        • Yarn
        • pnpm
      • Transpiler & Bundler
        • Babel
        • Rollup
        • esbuild
        • swc
        • Webpack
        • Vite
      • 뢄해와 톡합을 μœ„ν•œ μ—¬λŸ¬ 기술 비ꡐ
    • State Management
      • Zustand
    • React v18
      • Automatic batching
      • Suspense
      • Transition
    • SEO
      • Search Engine Optimization
      • Open Graph Element
      • Metadata
    • FE Develop
      • Scrubbing
      • Clipboard
    • Refactoring
      • λ¦¬νŒ©ν† λ§ 깊게 듀여닀보기
      • κΈ΄ μ½”λ“œ 쑰각내기
      • νƒ€μž… μ½”λ“œ μ²˜λ¦¬ν•˜κΈ°
      • μœ μ‚¬ν•œ μ½”λ“œ μœ΅ν•©ν•˜κΈ°
      • 데이터 보호
      • μ½”λ“œ μΆ”κ°€ 및 제거
    • OAuth 2.0
    • Analytics
      • Mixpanel
    • ETC
      • VSCode
    • React Hook In Action
      • useContext & Provider
      • μ»€μŠ€ν…€ ν›…
      • μ½”λ“œ λΆ„ν• ν•˜κΈ° with Suspense, lazy
      • Suspense와 이미지 μ μž¬ν•˜κΈ°
      • useTransition, uesDeferredValue
      • SuspenseList
Powered by GitBook
On this page
  • Clipboard API
  • Interface
  • μž₯점
  • 단점
  • μ£Όμ˜μ‚¬ν•­
  • μ œν•œμ‚¬ν•­
  • ClipboardItem
  • Custom Format
  1. DEV_NOTE
  2. FE Develop

Clipboard

Clipboard API

λΈŒλΌμš°μ €μ—μ„œ ν΄λ¦½λ³΄λ“œλ₯Ό μ‘°μž‘ν•˜κΈ° μœ„ν•΄ μ‚¬μš©λ˜λŠ” API μ§‘ν•©

  • ν΄λ¦½λ³΄λ“œμ—μ„œ 데이터λ₯Ό μ½μ–΄μ„œ 볡사, λΆ™μ—¬λ„£κΈ° λ“±μ˜ κΈ°λŠ₯을 μˆ˜ν–‰ν•  수 μžˆλ‹€.

  • ν…μŠ€νŠΈ, 이미지 및 기타 데이터λ₯Ό ν΄λ¦½λ³΄λ“œμ— 볡사할 수 μžˆλ‹€.

  • APIλŠ” μ‚¬μš©μžμ˜ κ°œμΈμ •λ³΄λ₯Ό μ‘΄μ€‘ν•˜λ„λ‘ μ„€κ³„λ˜μ—ˆκΈ° λ•Œλ¬Έμ— ν΄λ¦½λ³΄λ“œμ—μ„œμ˜ μ½λŠ” λ“±μ˜ μž‘μ—…μ—λŠ” μ‚¬μš©μžμ˜ 승인이 ν•„μš”ν•œ κ²½μš°κ°€ λ§Žλ‹€.

const clipBoard = navigator.clipboard;

μ΄μ „μ—λŠ” μžλ°”μŠ€ν¬λ¦½νŠΈμ—μ„œ document.exeCommand λ₯Ό μ‚¬μš©ν•΄ OS Clipboard에 μ•‘μ„ΈμŠ€ν–ˆμ§€λ§Œ, λ‹€μ–‘ν•œ λ³΄μ•ˆ 및 μ„±λŠ₯ 문제둜 Clipboard API둜 λŒ€μ²΄λ˜μ—ˆλ‹€.

Interface

ν΄λ¦½λ³΄λ“œμ˜ 두 κ°€μ§€ μ£Όμš” μΈν„°νŽ˜μ΄μŠ€

  • ν΄λ¦½λ³΄λ“œ μΈν„°νŽ˜μ΄μŠ€λŠ” 운영 체제(Window, macOS) ν΄λ¦½λ³΄λ“œμ— μ‚¬μš©λ¨

  • writeText(text: string): Promise<void> -> ν…μŠ€νŠΈλ₯Ό ν΄λ¦½λ³΄λ“œμ— 볡사 (비동기)

    • ν΄λ¦½λ³΄λ“œμ— μ“°λŠ” μž‘μ—…μ˜ 경우, λ²„νŠΌ 클릭과 같은 μ‚¬μš©μž 제슀처의 결과인 경우 λΈŒλΌμš°μ €λŠ” 일반적으둜 λͺ…μ‹œμ μΈ λ©”μ‹œμ§€ 없이 κΆŒν•œμ„ λΆ€μ—¬ν•œλ‹€.

    • ν•˜μ§€λ§Œ 잠재적인 였λ₯˜λ‚˜ κΆŒν•œ 문제λ₯Ό μΈμ‹ν•˜κ³  μ²˜λ¦¬ν•˜λŠ” 것이 μ’‹λ‹€.

  • readText(): Promise<T> -> ν΄λ¦½λ³΄λ“œμ˜ 데이터λ₯Ό 읽기

    • ν΄λ¦½λ³΄λ“œκ°€ λΉ„μ–΄ μžˆκ±°λ‚˜, ν…μŠ€νŠΈκ°€ ν¬ν•¨λ˜μ–΄ μžˆμ§€ μ•Šκ±°λ‚˜, ν΄λ¦½λ³΄λ“œμ˜ λ‚΄μš©μ„ λ‚˜νƒ€λ‚΄λŠ” 객체 쀑 ν…μŠ€νŠΈ ν‘œν˜„μ΄ ν¬ν•¨λ˜μ–΄ μžˆμ§€ μ•Šμ€ 경우 빈 λ¬Έμžμ—΄μ„ λ°˜ν™˜ν•œλ‹€.

    • ν•΄λ‹Ή λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•˜λ©΄ λΈŒλΌμš°μ €λŠ” μ‚¬μš©μžκ°€ 앱에 ν΄λ¦½λ³΄λ“œμ—μ„œ 읽을 수 μžˆλŠ” κΆŒν•œμ„ λΆ€μ—¬ν–ˆλŠ”μ§€ ν™•μΈν•œλ‹€.

    • 읽을 수 μžˆλŠ” κΆŒν•œμ„ λΆ€μ—¬ν–ˆλŠ”μ§€ 확인이 ν•„μš”ν•˜κΈ°μ— λͺ…μ‹œμ μœΌλ‘œ μ—λŸ¬μ²˜λ¦¬λ₯Ό ν•΄μ£Όμ–΄μ•Ό ν•œλ‹€.

write() vs writeText(), read() vs readText()

  • write(data: ClipboardItem): ClipboardItem 객체λ₯Ό λ°›μ•„ ν΄λ¦½λ³΄λ“œμ— μ“°μ΄λŠ” λ°μ‚¬μš©λœλ‹€.

    • λ‹€μ–‘ν•œ ν˜•μ‹μ˜ 데이터λ₯Ό ν΄λ¦½λ³΄λ“œμ— 볡사 κ°€λŠ₯

  • writeText(data: string): λ‹¨μˆœ ν…μŠ€νŠΈλ₯Ό ν΄λ¦½λ³΄λ“œμ— μ“°λŠ” 경우 ν•΄λ‹Ή λ©”μ„œλ“œλ₯Ό μ‚¬μš©

  • read(): Promise<ClipboardItem> : ClipboardItem 객체λ₯Ό λ°˜ν™˜ν•˜λ©°, ClipboardItem κ°μ²΄λŠ” ν΄λ¦½λ³΄λ“œμ— μžˆλŠ” 데이터와 ν•΄λ‹Ή ν˜•μ‹μ˜ λŒ€ν•œ 정보λ₯Ό 제곡

  • readText() Promise<string>: ν΄λ¦½λ³΄λ“œμ—μ„œ ν…μŠ€νŠΈλ₯Ό μ½μ–΄μ˜¨λ‹€.

μž₯점

  • λΈŒλΌμš°μ €μ—μ„œ ν΄λ¦½λ³΄λ“œ μ‘°μž‘μ„ μ§€μ›ν•˜μ—¬ 볡사, μž˜λΌλ‚΄κΈ°, λΆ™ν˜€λ„£κΈ°λ₯Ό μ‰½κ²Œ ν•  수 μžˆλ‹€.

  • λ‹€μ–‘ν•œ μœ ν˜•μ˜ 데이터λ₯Ό ν΄λ¦½λ³΄λ“œμ— 볡사할 수 μžˆλ‹€.

  • λ‹€μ–‘ν•œ μœ ν˜•μ˜ 데이터λ₯Ό 읽기 μ§€μ›ν•œλ‹€.

단점

  • ν˜Έν™˜μ„± 문제둜 일뢀 μ‚¬μš©μžλŠ” κ΄€λ ¨ κΈ°λŠ₯을 μ‚¬μš©ν•˜μ§€ λͺ»ν•  수 μžˆλ‹€.

  • ν΄λ¦½λ³΄λ“œλ₯Ό μž‘λ™ν•˜κΈ° μœ„ν•΄ μ‚¬μš©μžμ˜ μŠΉμΈμ„ μ–»μ–΄μ•Ό ν•˜λŠ” 경우 λΆˆν•„μš”ν•œ 간섭이 λ°œμƒ(νŒμ—…)

  • μ•…μ„± μ›Ήμ‚¬μ΄νŠΈκ°€ μ‚¬μš©μžμ˜ ν΄λ¦½λ³΄λ“œμ— λ³΅μ‚¬ν•œ λ―Όκ°ν•œ 정보에 μ•‘μ„ΈμŠ€ν•  수 μžˆλŠ” λ“± λ³΄μ•ˆμ˜ λ¬Έμ œκ°€ λ˜λŠ” κ²½μš°λ„ 쑴재

μ£Όμ˜μ‚¬ν•­

  • ν΄λ¦½λ³΄λ“œ μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ‚¬μš©ν•  λ•ŒλŠ” μ‚¬μš©μžμ˜ μŠΉμΈμ„ λ¨Όμ € λ°›μ•„μ•Ό ν•œλ‹€.

  • ν΄λ¦½λ³΄λ“œ 데이터λ₯Ό μ²˜λ¦¬ν•  λ•Œ 예기치 μ•Šμ€ 였λ₯˜κ°€ λ°œμƒν•˜μ§€ μ•Šλ„λ‘ 데이터 μœ ν˜•μ˜ 주의 ν•„μš”

  • μ‚¬μš©μž λͺ¨λ₯΄κ²Œ λ˜λŠ” λ™μ˜ 없이 ν΄λ¦½λ³΄λ“œμ—μ„œ μ½κ±°λ‚˜ μ“°λŠ” 것은 μ‹¬κ°ν•œ λ³΄μ•ˆ μœ„ν—˜μ΄ 될 수 μžˆμœΌλ―€λ‘œ 항상 ν΄λ¦½λ³΄λ“œμ— μ•‘μ„ΈμŠ€ν•  수 μžˆλŠ” κΆŒν•œκ³Ό μ •λ‹Ήμ‚¬μœ κ°€ μžˆλŠ”μ§€ 확인이 ν•„μš”ν•˜λ‹€.

μ œν•œμ‚¬ν•­

  • 클릭 이벀트 μ™ΈλΆ€μ—μ„œλŠ” ν•΄λ‹Ή λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•  수 μ—†λ‹€.

  • μ•…μ„± ν”„λ‘œκ·Έλž¨μ΄ μ‚¬μš©μž λͺ°λž˜ μŠ€ν¬λ¦½νŠΈλ‚˜ 기타 μ•…μ„± μ½”λ“œλ₯Ό μ‚¬μš©μžμ˜ ν΄λ¦½λ³΄λ“œμ— λ³΅μ‚¬ν•˜μ§€ λͺ»ν•˜λ„둝 ν•˜κΈ° μœ„ν•œ λ³΄μ•ˆ 쑰치

    • Failed to copy! DOMException: Document is not focused

ClipboardItem

Clipboard APIμ—μ„œ μ‚¬μš©λ˜λŠ” 객체둜, ν΄λ¦½λ³΄λ“œμ— μ“°κ±°λ‚˜ 읽을 데이터λ₯Ό λ‚˜νƒ€λ‚Έλ‹€.

  • ν΄λ¦½λ³΄λ“œμ— 일반 ν…μŠ€νŠΈκ°€ μ•„λ‹Œ λ‹€λ₯Έ 것을 λ„£μœΌλ €λ©΄ ClipboardItem을 μ‚¬μš©ν•˜μ—¬ μΌμΉ˜ν•˜λŠ” MIME μœ ν˜•μ„ μ •μ˜ν•΄μ•Ό ν•œλ‹€

  • type: ν΄λ¦½λ³΄λ“œ μ•„μ΄ν…œμ˜ μœ ν˜•μ„ μ„€λͺ…ν•˜λŠ” λ¬Έμžμ—΄μ˜ λ°°μ—΄

    • ν΄λ¦½λ³΄λ“œμ˜ μ•„μ΄ν…œμ΄ μ–΄λ–€ μ’…λ₯˜μ˜ 데이터λ₯Ό ν¬ν•¨ν•˜κ³  μžˆλŠ”μ§€λ₯Ό λ‚˜νƒ€λ‚Έλ‹€.

    • Text의 경우 ["text/plain"] κ³Ό 같은 값을 κ°–μŒ

  • getType(): νŠΉμ • 데이터 μœ ν˜•μ— λŒ€ν•œ 데이터λ₯Ό λΉ„λ™κΈ°μ μœΌλ‘œ κ°€μ Έμ˜€λŠ” λ©”μ„œλ“œ

  • getTypeAsString(): getTypeκ³Ό λΉ„μŠ·ν•˜μ§€λ§Œ 데이터λ₯Ό λ¬Έμžμ—΄λ‘œ λ°›λŠ”λ‹€.

const clipboardItem = new ClipboardItem({
  [MIME_TYPE]: new Blob([stream], { type: MIME_TYPE }),
})
  • Clipboard API μ΄μ „μ—λŠ” ν΄λ¦½λ³΄λ“œμ— 볡사 뢙여넣을 수 μžˆλŠ” MIME μœ ν˜•μœΌλ‘œ text/plain, text/html, image/png 만 μ§€μ›ν–ˆλ‹€.

  • λΈŒλΌμš°μ €μ— λ‚΄μž₯된 슀크립트 κ΅¬μ„±μš”μ†Œλ‚˜ μžλ°”μŠ€ν¬λ¦½νŠΈλ₯Ό μ œκ±°ν•˜κ±°λ‚˜ PNG decompression bomb assaults을 막기 μœ„ν•΄ 처리 μž‘μ—…μ„ μˆ˜ν–‰ν•˜λŠ” κ²½μš°κ°€ λ§Žμ•—λ‹€.

  • ν΄λ¦½λ³΄λ“œ APIλŠ” 이제 μ›Ή μ‚¬μš©μž μ§€μ • ν˜•μ‹μ„ μ§€μ›ν•˜λ―€λ‘œ κ°œλ°œμžκ°€ λͺ¨λ“  데이터λ₯Ό 볡사할 수 μžˆλ‹€.

  • μ›Ή μ‚¬μš©μž μ •μ˜ νƒ€μž…μ„ μ‚¬μš©ν•˜λ©΄ JSON.stringify() 와 ν•¨κ»˜ μ‚¬μš©ν•˜μ—¬ μ›Ήμ—μ„œ μƒˆλ‘œμš΄ 데이터 ν˜•μ‹μ„ μ •μ˜ν•  수 μžˆλ‹€.

  • 기본적으둜 ν…μŠ€νŠΈ ν˜•μ‹μœΌλ‘œ λ³€ν™˜ν•˜μ§€ μ•Šκ³  λ‹€λ₯Έ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μœΌλ‘œ 직접 볡사할 수 μžˆλ‹€.

μ •μ˜ν•˜κΈ°

  • ν΄λ¦½λ³΄λ“œμ— μ›Ή μ‚¬μš©μž μ •μ˜ ν˜•μ‹μ„ μ‚¬μš©ν•˜λ €λ©΄ Blob의 MIM μœ ν˜•μ˜ μ ‘λ‘μ‚¬λ‘œ 'web' 을 μž‘μ„±ν•΄μ•Ό ν•œλ‹€.

데이터 읽기

  • μ‚¬μš©μž μ •μ˜ ν˜•μ‹μ˜ 데이터λ₯Ό 읽으렀면 web 으둜 μ‹œμž‘ν•˜λŠ” ν΄λ¦½λ³΄λ“œ 개체λ₯Ό 검색해야 ν•œλ‹€.

try {
  const clipboardItems = await navigator.clipboard.read();
  for (const clipboardItem of clipboardItems) {
    for (const type of clipboardItem.types) {
      if (!type.startsWith('web ')) {
        continue;
      }
      const blob = await clipboardItem.getType(type);
    }
  }
} catch (err) {
  console.error(err.name, err.message);
}

μ›Ή μ‚¬μš©μž μ •μ˜ ν˜•μ‹μ€ ν‘œμ€€μ΄λ‹€.

ν΄λ¦½λ³΄λ“œ API의 λͺ©μ μ€ μ‚¬μš©μžκ°€ 파일 ν˜•μ‹μ„ λ§Œλ“œλŠ” 것이 μ•„λ‹ˆλΌ ν•œ μ†ŒμŠ€μ˜ μ½˜ν…μΈ λ₯Ό λ‹€λ₯Έ μ†ŒμŠ€μ˜ μž„μ‹œ μ €μž₯ 곡간에 직접 λ³΅μ‚¬ν•˜λŠ” 것, 즉 뢙여넣기라고 ν•˜λŠ” ν”„λ‘œμ„ΈμŠ€λ₯Ό μ§€μ›ν•˜λŠ” 것

μ§€μ›ν•˜μ§€ μ•ŠλŠ” ν™˜κ²½μ—μ„œ 처리

try {
  const permission = await navigator.permissions.query({ name: 'clipboard-read' });
  if (permission.state === 'denied') {
    throw new Error('Not allowed to read clipboard.');
  }
  const clipboardContents = await navigator.clipboard.read();
  for (const item of clipboardContents) {
    // do things with the clipboard entries
  }
} catch (error) {
  console.error(error.message);
}
PreviousScrubbingNextRefactoring

Last updated 1 year ago

If you're using MIME types other than text, .

Custom Format
it's good to provide a text/plain fallback if your target doesn't understand a particular MIME type