diff --git a/level-2/index.html b/level-2/index.html index 7e867a5..2cfc5ac 100644 --- a/level-2/index.html +++ b/level-2/index.html @@ -2,536 +2,27 @@
+ +- This specification defines an API for sharing text, links and other - content to an arbitrary destination of the user's choice. -
-- The available share targets are not specified here; they are provided - by the user agent. They could, for example, be apps, websites or - contacts. -
-- This example shows a basic share operation. In response to a button - click, this JavaScript code shares the current page's URL. -
-- shareButton.addEventListener("click", async () => { - try { - await navigator.share({ title: "Example Page", url: "" }); - console.log("Data was shared successfully"); - } catch (err) { - console.error("Share failed:", err.message); - } - }); --
- Note that a url of ''
refers to the current page
- URL, just as it would in a link. Any other absolute or relative URL can
- also be used.
-
- In response to this call to navigator.share(), the user agent - would display a picker or chooser dialog, allowing the user to select a - target to share this title and the page URL to. +
++ This incubated "Web Share - Level 2" document has been folded into the + official specification for the Web Share API.
Navigator
interface
-
- The Navigator
- interface is defined in [[HTML]].
-
- partial interface Navigator { - [SecureContext] boolean canShare(optional ShareData data = {}); - [SecureContext] Promise<void> share(optional ShareData data = {}); - }; --
- User agents that do not support sharing SHOULD NOT expose - share() on the Navigator interface. -
-
- canShare(
data)
MUST return
- true
unless
- share(
data)
would reject with
- TypeError, in which case it MUST return false
.
-
- When the share() method is called with argument - data, run the following steps: -
-- The user agent MUST NOT allow the website to learn which share - targets are available, or the identity of the chosen target. -
-files
.
- ShareData
dictionary
- - dictionary ShareData { - USVString title; - USVString text; - USVString url; - FrozenArray<File> files; - }; --
- The ShareData dictionary consists of several optional - members: -
-File
- array referring to files being shared.
- USVString
(as opposed to
- DOMString
)
- because they are not allowed to contain invalid UTF-16 surrogates. This means the user agent
- is free to re-encode them in any Unicode encoding (e.g.,
- UTF-8).
- href
on an a
element, before being given
- to the share target.
- - A share target is the - abstract concept of a destination that the user agent will transmit the - share data to. What constitutes a share target is at the discretion of - the user agent. -
-- A share target might not be directly able to accept a ShareData - (due to not having been written with this API in mind). However, it - MUST have the ability to receive data that matches some or all of the - concepts exposed in ShareData. To convert data to a format - suitable for ingestion into the target, the user agent SHOULD map - the members of ShareData onto equivalent concepts in the target. - It MAY discard members if necessary. The meaning of each member of the - payload is at the discretion of the share target. -
-- Each share target MAY be made conditionally available depending on the - ShareData payload delivered to the share() method. -
-- The list of share targets can be populated from a variety of sources, - depending on the user agent and host operating system. For example: -
-- In some cases, the host operating system will provide a sharing or - intent system similar to Web Share. In these cases, the user agent - can simply forward the share data to the operating system and not - talk directly to native applications. -
-- Mapping the ShareData to the share target (or operating - system)'s native format can be tricky as some platforms will not have - an equivalent set of members. For example, if the target has a "text" - member but not a "URL" member, one solution is to concatenate both - the text and url members of ShareData and pass - the result in the "text" member of the target. -
-- The following are defined in [[WEBIDL]]: -
-DOMException
- AbortError
- NotAllowedError
-
- TypeError
- is defined by [[ECMASCRIPT]].
-
- Web Share enables data to be sent from websites to native applications. - While this ability is not unique to Web Share, it does come with a - number of potential security issues that can vary in severity - (depending on the underlying platform). -
-https://
schemes).
- - The Web Share API is designed to be extended in the future by way of - new members added to the ShareData dictionary, to allow both - sharing of new types of data (e.g., images) and strings - with new semantics (e.g. author). -
-- The three members title, text, and url, are part - of the base feature set, and implementations that provide - navigator.share() need to accept all three. Any new members that - are added in the future will be individually - feature-detectable, to allow for backwards-compatibility with - older implementations that don't recognize those members. These new - members might also be added as optional "MAY" requirements. -
-
- The share() method returns a rejected promise with a
- TypeError if none of the specified members are present. The
- intention is that when a new member is added, it will also be added to
- this list of recognized members. This is for future-proofing
- implementations: if a web site written against a future version of this
- spec uses only new members (e.g.,
- navigator.share({image: x})
), it will be valid in future
- user agents, but a TypeError on user agents implementing an
- older version of the spec. Developers will be asked to feature-detect
- any new members they rely on, to avoid having errors surface in their
- program.
-
- Editors of this spec will want to carefully consider the genericity of - any new members being added, avoiding members that are closely - associated with a particular service, user agent or operating system, - in favour of members that can potentially be applied to a wide range of - platforms and targets. -
-- Thanks to the Web - Intents team, who laid the groundwork for the web app - interoperability use cases. In particular, Paul Kinlan, who did a lot of early - advocacy for Web Share. -
-