1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
|
<!DOCTYPE>
<html>
<script>
function loadText(blob) {
return new Promise((resolve, reject) => {
const reader = new FileReader;
reader.addEventListener("load", () => resolve(reader.result), { once: true });
reader.addEventListener("error", reject, { once: true });
reader.readAsText(blob);
});
}
function loadImage(blob) {
return new Promise((resolve, reject) => {
const image = new Image;
image.addEventListener("load", () => resolve(image), { once: true });
image.addEventListener("error", reject, { once: true });
image.src = URL.createObjectURL(blob);
});
}
function loadDocument(blob) {
return new Promise(async resolve => {
resolve(new DOMParser().parseFromString(await loadText(blob), "text/html"));
});
}
clipboardData = [];
exception = null;
async function writeStringToClipboard(type, string) {
try {
const itemData = {};
itemData[type] = string;
await navigator.clipboard.write([new ClipboardItem(itemData)]);
} catch (e) {
exception = e;
} finally {
webkit.messageHandlers.testHandler.postMessage("wroteStringToClipboard");
}
}
async function readClipboard() {
try {
const items = await navigator.clipboard.read();
for (const item of items) {
let itemData = {};
for (const type of item.types) {
const blob = await item.getType(type);
if (type === "text/html")
itemData[type] = await loadDocument(blob);
else if (type === "image/png")
itemData[type] = await loadImage(blob);
else
itemData[type] = await loadText(blob);
}
clipboardData.push(itemData);
}
} catch (e) {
exception = e;
} finally {
webkit.messageHandlers.testHandler.postMessage("readClipboard");
}
}
</script>
<body>
</body>
</html>
|