|  | 
|  | 1 | +# How to create ClipboardItem with DOMString | 
|  | 2 | +**Last updated: October, 2024** | 
|  | 3 | + | 
|  | 4 | +ClipboardItem constructor extends support to string data. ClipboardItem data can now be a blob, a string, or a promise that resolves to either a blob or a string.  | 
|  | 5 | + | 
|  | 6 | +The feature is available in Chromium-based browsers in M132 or later behind the flag `ClipboardItemWithDOMStringSupport` | 
|  | 7 | + | 
|  | 8 | +1. Download Microsoft Edge ([Canary Channel](https://www.microsoftedgeinsider.com/en-us/download/canary)). | 
|  | 9 | +2. Launch Edge with the command line flag `--enable-blink-features=ClipboardItemWithDOMStringSupport`. | 
|  | 10 | + | 
|  | 11 | +This enhancement allows web authors to directly write text data to the clipboard as a string, without needing to create a blob. | 
|  | 12 | + | 
|  | 13 | +```javascript | 
|  | 14 | +const data = new ClipboardItem({  | 
|  | 15 | +  "text/plain": "Hello World", // DOMString | 
|  | 16 | +  "text/html": Promise.resolve("<h1>Hello World</h1>") // Promise<DOMString> | 
|  | 17 | +}); | 
|  | 18 | +``` | 
|  | 19 | + | 
|  | 20 | +If the flag is not enabled, a blob is required for the same. | 
|  | 21 | + | 
|  | 22 | +```javascript | 
|  | 23 | +const data = new ClipboardItem({  | 
|  | 24 | +  "text/plain": new Blob(["Hello World"], {type: 'text/plain'}), | 
|  | 25 | +  "text/html": new Blob(["<h1>Hello World</h1>"], {type: 'text/html'}) | 
|  | 26 | +}); | 
|  | 27 | +``` | 
|  | 28 | + | 
|  | 29 | +Here is an example of writing a ClipboardItem with different supported data types.  | 
|  | 30 | + | 
|  | 31 | +## Example | 
|  | 32 | + | 
|  | 33 | +```javascript | 
|  | 34 | +async function writeToClipboard() { | 
|  | 35 | +  try { | 
|  | 36 | +    const plain_string = "Hello World"; | 
|  | 37 | +    const html_string_promise = Promise.resolve("<h1>Hello World</h1>"); | 
|  | 38 | +    const png_blob_promise = await fetch("/url/to/a/png/image").blob(); | 
|  | 39 | + | 
|  | 40 | +    const data = new ClipboardItem({  | 
|  | 41 | +      "text/plain": plain_string,  | 
|  | 42 | +      "text/html": html_string_promise, | 
|  | 43 | +      "image/png": png_blob_promise | 
|  | 44 | +    }); | 
|  | 45 | + | 
|  | 46 | +    await navigator.clipboard.write([data]); | 
|  | 47 | +    console.log('Data copied to clipboard'); | 
|  | 48 | +  } catch (e) { | 
|  | 49 | +    console.error(e.message); | 
|  | 50 | +  } | 
|  | 51 | +} | 
|  | 52 | +``` | 
0 commit comments