OSのシェア機能を呼び出したい

navigator.share navigator.canShare ShareData

このページでは、Web Share APIを使ったテキスト・URL・ファイルのOSネイティブシェアダイアログ呼び出しと、navigator.canShareによる対応チェックのインタラクティブなデモを確認できます。

デモ1:テキスト・URLのシェア

タイトル・テキスト・URLを入力して navigator.share() でOSのシェアダイアログを呼び出します。 モバイルで最も効果的です。

navigator.canShare() での事前チェック: 確認中...

デモ2:ファイルのシェア

画像ファイルを選択して navigator.canShare({ files }) で事前チェックを行い、 対応環境ではOSのシェアダイアログにファイルを渡します。

navigator.canShare({ files }) でファイルシェアの対応を事前チェックします

デモ3:現在のページをシェア

document.title location.href を使って現在のページをシェアする、 よくある「このページをシェア」ボタンのパターンです。

タイトル:(取得中...)
URL:(取得中...)

document.title location.href を使って現在のページ情報を自動セットします

コード例

js
// ✅ 基本の使い方(テキスト・URL)
async function shareContent() {
  const shareData = {
    title: 'UI Memo',
    text: 'UIコンポーネントの実装リファレンス',
    url: 'https://www.ui-memo.com',
  };

  try {
    await navigator.share(shareData);
    console.log('シェア成功');
  } catch (err) {
    if (err.name === 'AbortError') {
      console.log('ユーザーがキャンセルした');
    } else {
      console.error('シェア失敗:', err);
    }
  }
}

// ✅ 対応チェック(呼び出し前に必ず確認)
if (navigator.share) {
  // Web Share API 対応
  shareButton.disabled = false;
} else {
  // 未対応(PCブラウザの多くが非対応)
  shareButton.disabled = true;
}

// ✅ ファイルのシェア
async function shareFile(file) {
  const shareData = { files: [file] };

  // ファイルシェアの対応チェック
  if (!navigator.canShare(shareData)) {
    console.log('ファイルシェア未対応');
    return;
  }

  try {
    await navigator.share(shareData);
  } catch (err) {
    console.error('シェア失敗:', err);
  }
}

// ✅ 現在のページをシェア(よくあるパターン)
async function shareCurrentPage() {
  await navigator.share({
    title: document.title,
    url: location.href,
  });
}

// ⚠️ navigator.share() はユーザー操作(クリックなど)から
//    呼び出す必要がある。非同期で自動実行すると失敗する。

比較:Web Share API vs クリップボードコピー

観点Web Share APIクリップボードコピー
シェア先OSの全アプリ(SNS・メール・メモ等)クリップボードのみ
ファイル送信✅ 画像・PDF等に対応❌ テキストのみ
ユーザー操作シェア先をユーザーが選ぶコピー後にユーザーが貼り付ける
ブラウザ対応⚠️ モバイル中心(Chrome / Safari)✅ ほぼ全ブラウザ
HTTPS必須

🤖 AIプロンプトテンプレート

以下の要件を満たすTypeScript + Reactコンポーネントを作成してください。

- navigator.share() を使ってテキスト・URL・ファイルをOSのシェアダイアログに渡す
- navigator.canShare() で事前に対応チェックをし、未対応環境ではフォールバックUIを表示する
- AbortError(ユーザーキャンセル)とその他のエラーを分けてハンドリングする
- document.title と location.href を使って現在のページをシェアするパターンを含める
- navigator.share() はユーザー操作イベントからのみ呼び出す必要がある点をコメントで明示する
- コメントは日本語で記述する

⚠️ このプロンプトはあくまでたたき台です。AIの回答はモデルやバージョン、会話の文脈によって毎回異なります。意図通りに動かない場合は、条件を追記・修正してお使いください。