- From: Ashley (Scirra) <notifications@github.com>
- Date: Mon, 08 Nov 2021 07:29:56 -0800
- To: w3c/clipboard-apis <clipboard-apis@noreply.github.com>
- Cc: Subscribed <subscribed@noreply.github.com>
- Message-ID: <w3c/clipboard-apis/issues/161/963272967@github.com>
I think a deferral style API for the web platform would considerably simplify this, and some other related problems, without having to invent API-specific solutions. For example:
```js
document.addEventListener("click", e =>
{
// user gesture rules allow certain APIs synchronously here
const deferral = e.getDeferral();
prepareSomeClipboardDataAsync().then(data =>
{
// user gesture rules now apply synchronously here
deferral.use();
// can now write to clipboard normally
clipboard.write(data);
});
});
```
The core problem is certain API calls like `clipboard.write()` are only allowed at certain times, and doing async work means it might not be allowed by the time the async work finishes. A deferral system allows the developer to save the allowed call as a deferral, and then call it at a time of their choosing later on. This avoids the need to have a special promise mechanism specific to the clipboard API, and generalises the solution to work with any data processing with any API.
To ensure single-use, `getDeferral()` would only work if no sensitive APIs were previously called, and subsequently no sensitive APIs can be used synchronously either, until `deferral.use()` is called. That itself is also single use and only allows a single use of a sensitive API synchronously after the call. The browser can also impose further restrictions on `deferral.use()`, such as imposing a timeout, throwing if the document is not visible, and so on.
--
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub:
https://github.com/w3c/clipboard-apis/issues/161#issuecomment-963272967
Received on Monday, 8 November 2021 15:30:09 UTC