- From: Matt Giuca <notifications@github.com>
- Date: Wed, 24 May 2017 21:27:45 -0700
- To: heycam/webidl <webidl@noreply.github.com>
- Cc: Subscribed <subscribed@noreply.github.com>
- Message-ID: <heycam/webidl/issues/107/303919253@github.com>
@domenic: Yeah I find it aesthetically much nicer to ask a feature-detect question of the *API* not the dictionary object. I would rather avoid polluting the global namespace with dictionary names just for this purpose. On `navigator.share` I was leaning more towards adding a separate `canShare` method rather than expose the dictionary. Having a standard `supports` "sub-method" would help avoid polluting the namespace with `canX` methods. > The limitation of this is that it assumes a single dictionary argument. If we're going with this approach, I don't see why we would bother tying it to the dictionary at all, or restricting it to dictionary-taking methods. Why not just say certain methods have a "`supports`" sub-method that takes a single string and returns a Boolean indicating whether that feature is supported. I'm not sure why this "imageOrientation" example has a second argument (what "none" means). This could be formalized in IDL like this (strawman syntax): ```webidl partial interface Navigator { [SecureContext, SupportsFeatures<"image", "video">] Promise<void> share(ShareData data); }; ``` The presence of SupportsFeatures indicates that share.supports exists, and the feature list inside shows what strings are valid arguments to the supports method. @RByers suggestion works for me also: this generalizes to "the `supports` method takes exactly the same arguments as the base method, has no side-effect, and returns `true` if it notionally would accept that argument". For example, you could write: ```js canvas.toBlob(blob => { let sharedata = {title: 'My painting', image: blob}; if (!navigator.share.supports(sharedata)) { // error } navigator.share(sharedata); } ``` So you just call `supports` with the same argument you would then pass to the API. The downside of this is: how do we communicate "partial support"; for example, a UA that doesn't support sharing images won't fail if it gets a ShareData with a title and image, it'll just share the title. So should `navigator.share.supports` on a non-image-supporting UA return `false` if given a title and image, even though it would still partially succeed? Perhaps it's best if I can directly ask the API "do you support image sharing"? -- You are receiving this because you are subscribed to this thread. Reply to this email directly or view it on GitHub: https://github.com/heycam/webidl/issues/107#issuecomment-303919253
Received on Thursday, 25 May 2017 04:28:19 UTC