Comments (2)
A share target can be removed/added, etc. making this super weird if the API vanishes from one page load to the next.
This is not allowed by the spec. This clause is supposed to be a static decision that is compiled into the user agent; navigator.share
either exists, or it doesn't.
Some context:
- We originally did spec a
canShare
method (and I believe implemented it in Chrome).- Original spec text; though we would probably make it async.
- #5 "Remove canShare method?" -- ironically this bug begins with "As discussed with @marcoscaceres yesterday, the
canShare
method may be unnecessary." 🤣 - #8 Removed this method from the spec. Note the long discussion on that thread.
A summary of the reasoning for removing it is:
- User agents should always have at least one share target (even if it's just "copy to clipboard"), so
share
should either always be available, or never, as a static property of the user agent. (Note: "Chrome for Android" and "Chrome for Windows" being considered two different user agents in this context; one can have it available, the other not.) - Thus, if we provided
canShare
, it would likely be statically programmed to always return "false" or "true" depending on the user agent. Admittedly, a user agent could decide to have no built-in share targets, and thus programcanShare
to return(num_share_targets > 0)
, but we think this is unlikely. - Developers would still need to feature-detect the existence of the API as well (since some browsers won't expose it, at least for the foreseeable future). And having two methods, you'll potentially have to feature-detect both
share
andcanShare
(we have already launched a user agent withshare
but notcanShare
). Thus, your feature detection code goes from this:
if (!navigator.share)
return;
to this:
if (!navigator.share)
return;
if (navigator.canShare) {
// Assuming you use async; otherwise it's more complicated.
if (!(await navigator.canShare()))
return;
}
It doesn't seem worth making developers do 3 checks, if navigator.canShare
will almost always exist and return true if share
exists.
Do other implementors (Firefox?) feel the need to dynamically enable/disable sharing as share targets become available or unavailable?
from web-share.
Heh, I had a feeling we had discussed this. As you said, given that there is probably only going to always be one, then canShare()
is indeed unnecessary. If we want to have a pref to allow users to disable the API, then indeed not having it show up at all is the right solution.
from web-share.
Related Issues (20)
- Explain implementation status
- "current settings object's relevant global object" is not defined
- Call for consensus: publish as a Proposed Recommendation HOT 1
- Is implemented HOT 4
- Indicate explicitly the intent of the Web Share API regarding cross-origin HOT 1
- Support additional media types? HOT 3
- Base isn't needed in main branch of algorithm HOT 2
- Wrong explanation in example
- Suggesting preview for security should mention accessibility HOT 1
- No explicit acknowledgements? HOT 2
- What's the scope of "abort these steps"? HOT 4
- Make Security Considerations an explicitly named section? HOT 2
- ios web share save file to camera roll only works once HOT 3
- CFC to publish Web Share as a W3C Recommendation HOT 3
- Prepare spec for REC
- “Save Image” missing from Share Sheet HOT 1
- Web Share API fails to share a fully loaded data object/partial data object with file HOT 5
- Feature request: Send geo intents to native devices for selecting navigation apps HOT 1
- [ERRATA] Small Errata on Example 3 `navigates` instead of `navigator`. HOT 1
- Concerns Regarding Privacy and Functionality of Web Share API HOT 13
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from web-share.