v133 · clipboard
Deferred Content Lab
Three distinct real-world patterns where ClipboardItem with a Promise<DOMString> solves a problem that await data; write() cannot. Each demo resolves a different kind of deferred content at write time.
checking Clipboard API…
checking Promise ClipboardItem…
A — Lazy template selection
The promise resolves using the selected template at write time, not at call time. Changing the template after clicking copy still picks the right one.
—
B — Timed deferred copy
The promise resolves after a configurable delay — simulating async generation (e.g. chart render, compression). The old pattern would throw NotAllowedError because the user gesture would expire.
800 ms
—
C — Computed diff (deferred string)
The copied content is computed from two text areas at write time. Editing the fields after pressing copy still captures the latest diff.
—
Old vs. new pattern comparison
| Scenario | Old: await then write | New: Promise in ClipboardItem |
|---|---|---|
| Async content (delayed) | NotAllowedError — user gesture expired | ✓ Resolves inside browser's write gate |
| Lazy template | Captured at await time, not click time |
✓ Resolved at write time — always fresh |
| Multiple formats at once | Requires sequential awaits + separate Blob wraps | ✓ Each format value can be a string or promise |
Event log
Waiting for copy actions…