- From: François Beaufort <notifications@github.com>
- Date: Mon, 03 Apr 2023 00:18:08 -0700
- To: whatwg/dom <dom@noreply.github.com>
- Cc: Subscribed <subscribed@noreply.github.com>
- Message-ID: <whatwg/dom/issues/1181@github.com>
Web APIs are relying more and more on dictionaries. And doing feature detection of such members requires ugly and [unnecessary complicated code](https://github.com/whatwg/webidl/issues/107). Following https://github.com/WICG/EventListenerOptions/issues/31, https://github.com/whatwg/dom/issues/491, and many more over the years, I'm proposing WebIDL allows us to expose interfaces under a specific "namespace/scope" to avoid polluting the global scope.
### Current state for an API called `MyAPI`
1. A dictionary makes it unnecessarily hard to detect its members.
```webidl
dictionary MyDictionaryOptions {
boolean foo;
};
```
2. An interface pollutes global scope as `window.MyDictionaryOptions` now unnecessarily exists.
```webidl
[Exposed=Window]
interface MyDictionaryOptions {
boolean foo;
}
```
### Proposal
Use interfaces instead of dictionaries when possible and expose them under a specific member of the API.
```webidl
[Exposed=Window.MyAPI] // <-- NEW!
interface MyDictionaryOptions {
boolean foo;
}
```
```js
if ("foo" in window.MyAPI.MyDictionaryOptions) {
// 1. It's easy to detect foo exists in MyDictionaryOptions
// 2. Detecting it does not pollute global scope
// 3. It does not require executing some methods to test it.
}
```
What do you folks think about this?
--
Reply to this email directly or view it on GitHub:
https://github.com/whatwg/dom/issues/1181
You are receiving this because you are subscribed to this thread.
Message ID: <whatwg/dom/issues/1181@github.com>
Received on Monday, 3 April 2023 07:18:20 UTC