선행개발

자바스크립트로 공유 기능 커스텀하기

조드래곤나인 2023. 7. 13. 20:02

 



navigator.share를 사용해서 URL, 텍스트, 파일을 공유할 때 커스텀해서 공유할 수 있다.

브라우저 지원 범위

Firefox / WebView Android 에서 미지원하고, 대부분 지원한다.
Browser compatibility

코드 예제

6장 코드 스니펫 > Boilerplate 코드를 기반으로 데모가 제작되었습니다.
데모보기

<!DOCTYPE html>
<html class="w-full h-full">
<head>
  <meta charset="UTF-8"/>
  <meta name="viewport"
        content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
  <title>React</title>

  <script src="https://cdn.tailwindcss.com"></script>

  <script src="https://unpkg.com/react@18/umd/react.development.js"></script>
  <script src="https://unpkg.com/react-dom@18/umd/react-dom.development.js"></script>
  <script src="https://unpkg.com/@babel/standalone/babel.min.js"></script>
</head>
<body class="w-full h-full">
<div id="root" class="w-full h-full"></div>

<script type="text/babel">
  const MyApp = () => {
    const [message, setMessage] = React.useState('');
    const [message2, setMessage2] = React.useState('');

    const shareText = async () => {
      try {
        await navigator.share({
          title: 'One Piece | Web Share API',
          text: 'Share Text',
          url: 'https://the-next-web-research-lab.github.io/fe-dev/code-snippets/Javascript/WebApis.html',
        })

        setMessage('One Piece shared successfully')
      } catch (err) {
        setMessage(`Error: ${err}`)
      }
    };

    const shareFiles = async (event) => {
      const files = event.target.files;

      if (files.length === 0) {
        setMessage2('No files selected.');
      } else {
        if (navigator.canShare) {
          if (navigator.canShare({files})) {
            try {
              await navigator.share({
                files,
                title: 'Files',
                text: 'My Files'
              })
              setMessage2('Shared!')
            } catch (error) {
              setMessage2(`Error: ${error.message}`)
            }
          } else {
            setMessage2(`Your system doesn't support sharing these files.`);
          }
        } else {
          setMessage2(`Your browser doesn't support the Web Share API.`);
        }
      }
    };

    return <div className="h-full w-full text-xl text-center flex flex-col gap-y-5 pt-5">
      <div>
        <button
          type="text"
          onClick={shareText}
          className="py-2 px-4 bg-slate-900 text-white rounded-lg text-sm">
          Share Text
        </button>
      </div>
      <p>message: {message}</p>

      <div>
        Share Files: <input type="file" onChange={shareFiles}/>
      </div>
      <p>message: {message2}</p>
    </div>;
  }

  ReactDOM
    .createRoot(document.querySelector('#root'))
    .render(<MyApp/>);
</script>
</body>
</html>

 

공식 블로그 링크

 

자바스크립트로 공유 기능 커스텀하기

navigator.share를 사용해서 URL, 텍스트, 파일을 공유할 때 커스텀해서 공유할 수 있다. 브라우저 지원...

blog.naver.com

 

728x90