4
function loadText(blob) {
5
return new Promise((resolve, reject) => {
6
const reader = new FileReader;
7
reader.addEventListener("load", () => resolve(reader.result), { once: true });
8
reader.addEventListener("error", reject, { once: true });
9
reader.readAsText(blob);
13
function loadImage(blob) {
14
return new Promise((resolve, reject) => {
15
const image = new Image;
16
image.addEventListener("load", () => resolve(image), { once: true });
17
image.addEventListener("error", reject, { once: true });
18
image.src = URL.createObjectURL(blob);
22
function loadDocument(blob) {
23
return new Promise(async resolve => {
24
resolve(new DOMParser().parseFromString(await loadText(blob), "text/html"));
31
async function writeStringToClipboard(type, string) {
34
itemData[type] = string;
35
await navigator.clipboard.write([new ClipboardItem(itemData)]);
39
webkit.messageHandlers.testHandler.postMessage("wroteStringToClipboard");
43
async function readClipboard() {
45
const items = await navigator.clipboard.read();
46
for (const item of items) {
48
for (const type of item.types) {
49
const blob = await item.getType(type);
50
if (type === "text/html")
51
itemData[type] = await loadDocument(blob);
52
else if (type === "image/png")
53
itemData[type] = await loadImage(blob);
55
itemData[type] = await loadText(blob);
57
clipboardData.push(itemData);
62
webkit.messageHandlers.testHandler.postMessage("readClipboard");