diff --git a/pages/index.js b/pages/index.js index 809d0de8..1f87045c 100644 --- a/pages/index.js +++ b/pages/index.js @@ -1,23 +1,93 @@ +// pages/index.js import Head from 'next/head' -import Header from '@components/Header' -import Footer from '@components/Footer' +import { useRouter } from 'next/router' +import { useEffect, useMemo, useState } from 'react' export default function Home() { + const router = useRouter() + const { title: qTitle, gpt: qGpt } = router.query + + // クエリを文字列に整形 + const title = useMemo(() => (typeof qTitle === 'string' ? qTitle : ''), [qTitle]) + const gpt = useMemo(() => (typeof qGpt === 'string' ? qGpt : ''), [qGpt]) + + const [status, setStatus] = useState('') + const [showUrl, setShowUrl] = useState(false) + + // クリップボードコピー(失敗時は案内だけ表示) + const copyHeadline = async () => { + try { + if (title) { + await navigator.clipboard.writeText(title) + setStatus('✅ 見出しをコピーしました。') + } else { + setStatus('⚠️ 見出しが取得できませんでした。リンクを確認してください。') + } + } catch (e) { + setStatus('⚠️ 自動コピーに失敗。必要なら長押し/ドラッグで手動コピーしてください。') + } + } + + // 同一タブでChatGPTを開く(新規タブは使わない) + const openChatGPT = () => { + if (!gpt) { + setStatus('⚠️ ChatGPTリンクが無効です。') + return + } + try { + // Drive/Gmailの内蔵ビューア誤爆を避けるため top.location を優先 + window.top.location.href = gpt + } catch { + window.location.href = gpt + } + } + + useEffect(() => { + // 初期メッセージ + setStatus('') + }, [title, gpt]) + return ( -
+ <> - Next.js Starter! - + + + 見出しをコピーしてChatGPTへ -
-
-

- Get started by editing pages/index.js -

-
+
+
+
見出しをコピーしてから、ChatGPTへ移動します(同一タブ)。
+
見出し:{title || '(未取得)'}
+
※ Googleドメインは経由しません。外部ホスティングから直接ChatGPTを開きます。
+
{status}
+ + + + + + {showUrl && ( +
+ うまく開けない場合は、下のリンクを長押し→“開く”で開いてください:
+ {gpt || '(リンク未設定)'} +
+ )} +
+
-
+ + ) }