JavaScriptのnavigator.share()でシェアボタンを作成する方法

navigator.share()とは

navigator.share()とはテキスト、URL、ファイルなどのデータを共有できるメソッド。

利用可能な共有対象はデバイスによって異なり、スマートフォンではTwitterの共有も可能となる。

Mac ChromeやFirefoxでは使用不可

2021年9月現在ではMac ChromeやFirefoxではnavigator.share()を使用できない。

そのため、navigator.canShareを使用して処理を条件分岐させる必要がある。

if (navigator.canShare) {
  console.log('navigator.share() が使用可能')
} else {
  console.log('navigator.share() が使用不可')
}

https://caniuse.com/web-share

navigator.share()の使用方法

navigator.share()はtitle, text, url, filesなどのパラメーターを設定できる。

filesには画像ファイルも設定できてTwitterなどに利用できる。

const btn = document.querySelector('button')
const url = 'https://iwb.jp/s/javascript-navigator-share-button/'
const filename = 'sushi.jpg'

if (navigator.canShare) {
  const b = document.getElementById('b')
  const imgSrc = url + '/' + filename
  b.addEventListener('click', () => {
    fetch(imgSrc)
      .then(res =>  {
        return res.blob()
      })
      .then(function(blob) {
        const file = new File([blob], filename, {type: 'image/jpeg'})
        const filesArray = [file]

        if(navigator.canShare && navigator.canShare({ files: filesArray })) {
          navigator.share({
            title: '寿司の画像',
            text: 'ネタはマグロや白海老など',
            url: url,
            files: filesArray,
          })
        }
      })
  })
} else {
  btn.style.display = 'none'
}

navigator.share()のサンプル