참고: 번역본.
Copyright © 2023 World Wide Web Consortium. W3C® liability, trademark and permissive document license rules apply.
이 명세서는 텍스트, 링크 및 기타 콘텐츠를 사용자가 선택한 임의의 대상에 공유하기 위한 API를 정의합니다.
사용 가능한 공유 대상은 이 문서에서 명시하지 않으며, 사용자 에이전트가 제공합니다. 예를 들어 앱, 웹사이트 또는 연락처일 수 있습니다.
이 섹션은 본 문서가 발행된 시점의 상태를 설명합니다. 현재 W3C 출판물 목록과 이 기술 보고서의 최신 개정판은 W3C 기술 보고서 색인 https://www.w3.org/TR/에서 확인할 수 있습니다.
이 문서는 웹 애플리케이션 워킹 그룹에서 권고 절차를 사용하여 권고안으로 발행되었습니다.
W3C는 이 명세서를 웹 표준으로 널리 배포할 것을 권장합니다.
W3C 권고안은 광범위한 합의 구축 후 W3C 및 회원사가 승인한 명세서로, 워킹 그룹 회원사의 로열티 프리 라이선스 이행 약속이 포함되어 있습니다. 향후 권고안의 업데이트에는 새로운 기능이 포함될 수 있습니다.
본 문서는 W3C 특허 정책에 따라 운영되는 그룹에서 작성되었습니다. W3C는 그룹 산출물과 관련된 공개 특허 목록을 관리합니다. 해당 페이지에는 특허 공개 방법도 안내되어 있습니다. 특정 특허에 실제로 해당하는 Essential Claim(s)가 있다고 판단되는 경우 W3C 특허 정책 6절에 따라 정보를 공개해야 합니다.
이 문서는 2021년 11월 2일 W3C 프로세스 문서에 따라 관리됩니다.
이 섹션은 비규범적입니다.
콘텐츠 공유 기능은 종종 기본 운영체제가 "공유" 기능을 제공하는지와 OS UI 관례에 따라 달라집니다. 예를 들어, 일부 운영체제는 "공유 시트"를 제공하고, 다른 운영체제는 팝업 메뉴를 사용합니다. 이러한 의존성으로 인해 Web Share API를 모든 OS에 적용하기 위한 구현자들의 작업이 진행 중입니다. 이 진행 상황은 구현 보고서의 실패 사례로 나타나며, 해당 보고서는 제한된 OS에서 테스트를 수행하여 생성됩니다. 그러나 워킹 그룹은 Web Share API가 시간이 지남에 따라 모든 OS에서 더 널리 사용될 것으로 낙관하고 있으며, 이미 다양한 기기의 인기 OS에서 널리 사용되고 있습니다.
이 섹션은 비규범적입니다.
WebIDL 딕셔너리 동작 특성상, 사용자 에이전트가 인식하지 못하는 멤버가 share
()
에 전달되면 무시됩니다.
여러 멤버를 공유할 때 사용자 에이전트가 일부 멤버를 지원하지 않을 경우 문제가 될 수 있습니다. 전달하는 모든 멤버가 지원되는지 확실히 하려면 각 멤버를 개별적으로 canShare
()
로 확인할 수 있습니다.
또는, 지원되지 않는 멤버에 대해 UI 컴포넌트를 표시하지 않도록 애플리케이션 UI를 조정할 수 있습니다.
const data = {
title: "Example Page",
url: "https://example.com",
text: "This is a text to share",
someFutureThing: "some future thing",
};
// 지원되지 않는 멤버들
const unsupported = Object.entries(data).filter(([key, value]) => {
return !navigator.canShare({ [key]: value });
});
기본 허용 목록이 'self'로 되어 있어 Web Share API는 기본적으로 퍼스트파티 컨텍스트에서만 사용할 수 있습니다.
서드파티에서는
iframe
의
allow
속성으로 API 사용을 허용할 수 있습니다:
또는, 퍼스트파티 컨텍스트에서 HTTP 응답 헤더를 지정하여 API를 비활성화할 수 있습니다:
자세한 내용과 출처별 권한 정책 제어 방법은 Permissions Policy 명세서를 참고하세요.
이 명세서는
"web-share"
라는
문자열로 식별되는 정책 제어 권한을 정의합니다.
기본 허용
목록은 'self'이며, 이는 서드파티 컨텍스트가
기본적으로 API를 사용할 수 없음을
의미합니다.
사용자 에이전트가 Permissions Policy의
Permissions-Policy
HTTP 헤더를 지원하는 것은 OPTIONAL입니다.
개발자는 Permissions Policy 명세에서 제공하는 방법을 사용해 서드파티 컨텍스트가 이 API를 사용할 수 있는지 제어할 수 있습니다.
이 섹션은 비규범적입니다.
이 명세가 사용자 인터페이스에 정보를 표시하는 데 사용될 때, 구현자는 해당 플랫폼의 OS 수준 접근성 지침을 따라야 합니다. 또한 공유는 최종 사용자에게 잠재적 보안 영향을 미칠 수 있으므로
share
()
메서드의 일환으로 설명된 대로, 공유 UI는 접근성
있게 제공되어야 하며, 각 플랫폼의 보안 UI 지침도 고려해야 합니다. 주요 고려사항은 다음과 같습니다:
이러한 요소들은 시각, 운동, 인지 장애가 있는 사용자가 웹 페이지가 공유하는 콘텐츠의 성격을 더 잘 이해할 수 있도록 돕습니다.
share
()
에서 어떤 공유 대상을 선택했는지 알 수
없습니다. 이는
지문 채취(fingerprinting)나 사용자의 디바이스 또는 선호 공유 대상에 관한 정보 유출을 막기 위한 설계입니다.
share
()
를 프라이버시 브라우징 모드에서 사용하면, 사용자의 프라이버시 설정을 존중하지 않는
서드파티 애플리케이션에 개인 데이터가 유출될 수 있습니다. 사용자 에이전트는 추가 경고를 제공하거나 MAY 프라이버시 모드에서 기능을 완전히
비활성화할 수 있지만, 선택 UI가 충분한 경고로 간주될 수 있으므로 필수는 아닙니다.
비규범적 마크가 된 섹션뿐 아니라, 이 명세서의 모든 저작 지침, 도표, 예시, 참고도 비규범적입니다. 그 외 모든 내용은 규범적입니다.
이 문서의 MAY, MUST, OPTIONAL, SHOULD 키워드는 BCP 14 [RFC2119] [RFC8174] 에 설명된 대로, 반드시 대문자로 표기된 경우에만 해당 의미로 해석됩니다.
WebIDLpartial interface Navigator {
[SecureContext] Promise<undefined> share
(optional ShareData
data = {});
[SecureContext] boolean canShare
(optional ShareData
data = {});
};
dictionary ShareData
{
sequence<File> files
;
USVString title
;
USVString text
;
USVString url
;
};
이 섹션은 비규범적입니다.
다음은 권고안 제안(Proposed Recommendation) 단계에서 명세에 적용된 규범적 변경사항입니다. 전체 변경 내역은 커밋 로그를 참고하세요.
다음은 최초 공개 작업 초안(First Public Working Draft)에서 후보 권고안(Candidate Recommendation)까지 명세에 적용된 규범적 변경사항입니다. 전체 변경 내역은 커밋 로그를 참고하세요.
편집자들은 명세 개선에 큰 기여를 한 다음 W3C 그룹들에 감사드립니다: Accessible Platform Architectures 워킹 그룹, Internationalization 워킹 그룹, Privacy Interest Group, 그리고 Technical Architecture Group.
Web Intents 팀에도 감사드립니다. 이들은 웹 앱 상호운용성(use case) 기초를 마련했습니다. 특히 Paul Kinlan은 Web Share 초기 옹호에 많은 기여를 했습니다.