개요
붙여넣기는 HTML·플레인·파일을 가져옵니다. 브라우저마다 공백 처리가
다릅니다. 결정적 파싱은 Rust가 유리할 수 있지만, raw 데이터는 여전히
JS의 clipboardData·비동기 Clipboard API로 받습니다.
JS ↔ WASM 경계와 함께 페이로드 크기를 설계하세요.
beforeinput·붙여넣기
들어오는 편집을 막거나 바꿀 때 beforeinput을 씁니다.
IME와 일부 환경에서는 취소가 제한됩니다.
흔한 흐름: JS가 클립보드 읽기 → 가벼운 전처리 → WASM이 파싱·정제 → 연산이나 깨끗한 HTML 문자열 반환 → JS가 DOM/모델에 적용.
정제 위치
- Rust/WASM: 테스트·네이티브와 규칙 공유에 유리.
- JS: DOMParser·기존 생태계와 붙이기 쉬움; 규칙 이중화 주의.
붙여넣기·불러오기 경로마다 정책이 다르면 XSS로 이어지기 쉽습니다. 한 정책을 유지하세요.
클립보드 API
비동기 읽기는 사용자 제스처·권한이 필요한 경우가 많습니다. 커스텀 선택 모델과 함께 쓸 때 복사·잘라내기 합성 이벤트 전략이 필요할 수 있습니다.
Wasm 가이드
에디팅 방식
contenteditable + WASM: 진실 원천, 이벤트 순서, DOM↔모델 루프, 정규화, Rust 호출 시점.
IME·조합 입력
조합 이벤트, Rust 문서 모델 동기화, IME는 여전히 브라우저 영역인 이유.
JS ↔ WASM 경계
문자열·복사·배치 연산, 비동기와 입력 이벤트, 핫 패스 비용 줄이기.
툴링·번들·워커
wasm-pack, wasm-opt, 코드 스플릿, Web Worker, COOP/COEP·스레드.
협업·CRDT (WASM)
Yrs·y-crdt, Yjs 연동, 스냅샷 vs 업데이트 스트림.
선택·Range·오프셋
UTF-16 vs UTF-8, JS Selection/Range, Rust 모델 매핑·getTargetRanges.
실행 취소·다시 실행 모델
브라우저 undo 스택 vs 모델 히스토리, 프로그래밍 DOM, WASM 트랜잭션.
접근성 (WASM 호스트)
편집 표면이 브라우저일 때 역할·포커스·스크린 리더.
테스트·디버깅
E2E, JS↔WASM 경계 프로파일링, IME·붙여넣기 CI 재현.
보안·배포
CSP, SRI, 모듈 무결성, contenteditable 옆 WASM 호스팅.