Git Product home page Git Product logo

Comments (2)

mgiuca avatar mgiuca commented on August 20, 2024

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).
  • #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 program canShare 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 and canShare (we have already launched a user agent with share but not canShare). 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.

marcoscaceres avatar marcoscaceres commented on August 20, 2024

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)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo 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.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.