質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

5回答

794閲覧

親ページからしか行けない子ページの作り方

moriyama_tosimi

総合スコア22

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2020/02/05 01:34

前提・実現したいこと

【HTML】の初心者です。webページで検索されないページ(会員専用ページ)など有りますが、【IDやパスワード】など必要なく、
親ページから、簡単に子ページに、いけて、親ページ以外からは子ページに行けないwebページを作りたいのですが、
どこをどの様にすればいいのかさえ分かりません。
何かヒントでも教えてください。
《ちなみに》
親ページと子ページは別のページにしたいです。

発生している問題・エラーメッセージ

エラーメッセージ

該当のソースコード

ソースコード

試したこと

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2020/02/05 01:40

HTML JavaScriptだけということでしょうか。 ページ自体は何で作られているのでしょうか
Zuishin

2020/02/05 01:57

「別のページ」が何を意味するのかわかりませんが、親ページで操作すると、JavaScript でページの中身全てと URL を書き換えればいいのではないかと思います。「single page application」で調べると簡単な実装法が見つかると思います。
退会済みユーザー

退会済みユーザー

2020/02/05 02:00

「子ページ」の要求を受けた時その要求ヘッダに含まれる Referer を調べて、それが「親ページ」でなければアクセスを拒否するというようなことが思いつきます。Web サーバー側にそのような仕組み(例えば、IIS なら URL Rewrite モジュールを使うとか)を実装できるのですか?
moriyama_tosimi

2020/02/05 02:42

早速のご回答有難う御座います。 ヒントを頼りにWEBでしれべたく思います。 また分からない所が出来ましたら。お尋ねします。
m.ts10806

2020/02/05 03:07

回答ではなく質問への追記修正依頼なので基本的には質問本文を調整してください
m.ts10806

2020/02/06 03:00 編集

ベストアンサーに選ばれた回答には誤っている点が確かにあり、また質問者さんをかなり下に見た発言もあります。 あと、ごまかすような方法なので目指すやり方には合致しません。 一度挙動など確認した上で再考されることを強くすすめます。
guest

回答5

0

1つ考えられる方法として、「遷移先のページをすべてJavaScriptで構築する」という方法が考えられます。

…が、そもそも論として、「どのような目的で」「どのようなシステムを使って」構築したいのでしょうか。そこがはっきりしないと、的はずれな案が出されることとなります。

投稿2020/02/05 02:13

maisumakun

総合スコア146018

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

本来はサーバーサイドの仕組みとして実装するべき事かと思いますが、
JavaScriptでも一応可能です。

HTTPリクエスト(このページにアクセスしたいよ〜という信号)に、リファラーという、「ひとつ前のページのURL」の情報が埋め込まれているので、
その情報をもとに条件分岐して、
ひとつ前のページが親ページじゃなかった場合、ひとつ前のページに飛ばす、といった処理ですね。

JavaScriptでリファラーを取得するには document.referrer という変数にアクセスします。

JavaScriptで別のページに飛ばすにはlocation.hrefという変数に、飛ばしたいURL(文字列)を代入します。

この2つを使えば、希望の処理ができると思いますよ。
(もしサーバーサイドで実装することになっても、リファラーによって飛ばす、という根本的な考え方は同じになります。)

投稿2020/02/05 02:17

編集2020/02/05 02:20
H40831

総合スコア975

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2020/02/05 04:52 編集

>「ひとつ前のページのURL」 この表現は誤解を招く可能性があるのでは。 あるページを開いていてURL直打ちで切り替えた場合って、リファラは「直アクセス」として空になりませんでしたっけ? 追記。 念のため挙動確認しました。 「1つ前」より「リンク元」としたほうが良さそうです。
Zuishin

2020/02/05 04:54

この方法だと JavaScript を考慮しないロボットにインデックスされませんか? サーバーで処理できるならサーバーで処理すればいいし、できないならわざわざサーバーを挟む必要は無いように思うんですが。
H40831

2020/02/05 06:53

補足ありがとうございます! 質問者様のレベル感を考慮した粒度で回答しておりますが、 皆様のコメントが良い補足となって、より正しい知識の習得につながったかと思います。
m.ts10806

2020/02/05 07:04

「ベストアンサーに選ばれた回答」であれば、先の2件のコメントは指摘なので、今後見られることを加味すると修正すべきと思います(修正してもらえるものと思ってたので低評価しました)
H40831

2020/02/05 10:21 編集

質問者様のレベル感を考慮した粒度で回答しております。 概要をザクッと理解して頂いてから、細かい部分を訂正する方法と、 最初から正確性重視の細かい説明を理解してもらう方法では、物事を理解する難易度は、だいぶ違うと思います。 また、teratailはコミュニティですので、 他の回答や、ベストアンサーについたコメントなどは当然確認されるものだと思っておりますし、 反対に、ベストアンサーについているコメントすら確認しないレベルの方に対して不備なく物事を理解していただくことは不可能かと思います。
m.ts10806

2020/02/05 11:01 編集

質問者に理解度を確認してみては。 https://teratail.com/help/question-tips#questionTips4-2 そういった意味では「説明責任」は質問者にも発生します。 それに、私はあくまで「今後同じような問題を抱えた人が見たときに勘違いするのではないか」という懸念をしています。「コミュニティである」というのでしたら尚更ですね。 まぁお任せしますが。
H40831

2020/02/05 16:54 編集

質問者様の責任について自分はとやかく言いませんが、 自分は、少なくとも他の方より理解していただけたからベストアンサーなのだと思っております。 「今後同じような問題を抱えた人」で「この質問記事にたどり着いて『これだ』と思う人」は、 質問者様と同じレベル感であるかと思われます。 質問文に書かれた目的とは違う用途で本回答の内容を利用し、 影響のあるレベルの問題を引き起こすような立場の方が居ると予測するのは、 いささか非現実的ではと感じます。 Teratailの回答者様方を拝見していると 「文章の正確性を何よりも優先している」つもりのようで、 むしろ「正確性以外の(読者に理解してもらえるか等の)重要な要素をないがしろにしている」と感じる場面がちらほらあります。 正直、公式ドキュメントを読んでいるのと変わらないです。 まぁ自分は最初からお任せしておりますが。
m.ts10806

2020/02/05 23:41 編集

誤った解釈のまま覚えさせて後々トラブルや恥かくことになるのを考えないのでしたらどうぞ。今後あなたの回答者としての信頼性が落ちてくだけです。 文字でのやり取りが主体なのに正確性を求めないで何を求めますか?書いた通りにしか伝わらない、書いた通りにしか動かないのに。 大事故の主な原因は「ちょっとぐらいいいじゃん」という甘い認識からです。正確性を蔑ろにするということは生命線を断つ行為に等しい。 質問者のことを考えた行為とはとても思えませんね。 指摘を素直に受け入れる姿勢がないのもよろしくないかと。自身も1エンジニアとして学び続けるつもりもないようですし…。 あと、質問者レベル云々はかなり質問者をバカにしてますがお気づきでしょうか。
H40831

2020/02/06 04:42 編集

どういう人を信頼するかは人それぞれである事をご理解ください。 「コーチング」等のコミュニケーションスキルにて解説されております。 参考リンクをお付けいたします。 https://www.abm.or.jp/blank/category/02_%E3%82%A2%E3%83%89%E3%83%A9%E3%83%BC%E3%83%BB%E3%82%B3%E3%83%BC%E3%83%81%E3%83%B3%E3%82%B0 自分の回答のポリシーですが、 「概要の理解」の段階では、そもそも新しい概念の習得に脳のリソースを大量消費している状況であり、 「親しみのない用語を理解した上で文章を読み込む」というリソースを同時に消費させるべきではないという考えでお伝えしています。 また「理解しなくてよい」という事ではなく、 「コメントや他回答を読むことで、後から理解してもらえればいい」という指針です。 「学び続けるつもりがない」のではなく、 正確性以外の要素をないがしろにした回答ポリシーに共感できないのです。 文字でのやり取りの前に、人とのやり取りです。 質問者様はご自身で初心者だと申告されておりますので、それを考慮して回答しております。 物事の理解は「概要の理解」→「実践」→「正確性の向上」を行い深めていくものであり、「概要の理解」をないがしろにして最初から正確性一辺倒の文章が正確に理解できるのはコンピュータと一握りの人間だけだと思います。 「この記事にたどり着いた人が、コメントや他の回答を読むことなどない」というイメージを持たれているとしたら、そちらも周りの人をバカにしているかと思います。
m.ts10806

2020/02/06 05:08 編集

なるほど。同じことをもう一度書くことになるのでやめときます。 どうも曲がった独自の解釈をしたいみたいなので。
H40831

2020/02/06 05:12

同意見です
m.ts10806

2020/02/06 05:29

3つだけ聞いておきましょうか。いや4つか。 ・Zuishinさんの指摘も踏まえて自身の回答を改めるつもりはないのか ・どこに「正確性以外をないがしろにしたポリシー」が存在するのか ・どこに「この記事にたどり着いた人が、コメントや他の回答を読むことなどない」なんて書いてあるのか 正確性をないがしろにしておいて、あなたの仰る正確性以外とやらを取るのはエンジニアとして致命的ですしね。 正確性が十分に担保された前提でようやく踏み込める話です。 コメント見てると、あなたのほうが「どうせコメント欄まで見るやついねえよ、適当に濁しとけ」って気持ちが節々に出てますけど大丈夫ですか? 心配してるというより思考が謎であるという疑問です。 4つ目。 ・何が「同意見」なのか 自身が曲がった解釈をしてると気づいてないのは厳しいですね。 ひとまず、正確性を担保してからそれ以外とやらと追求してください。 正確性が欠けては正確性以外とやらも成り立ちません。前提間違ってます。 プログラムの文法間違ってるのにユーザビリティとかレイアウトとかUXとか考えられますか?
kyoya0819

2020/03/06 14:34

1ヶ月前の質問ですが何点か気になったので、 > JavaScriptでも一応可能です 一体どのような手法を用いることをお考えでしょうか?VueやReact?Filebase? また、親ページからの訪問であることの担保はどうするつもりでしょうか? 「質問者様のレベル感を考慮した粒度」に関しては細かに突っ込みませんが、回答中で書くべきものが欠けているように感じ受けます。 何よりもteratailは世界中の人がネット環境さえあれば基本的に誰でも見られる環境です。そのような中で、「こんくらいでいっかな〜」「質問者さんの粒度を考えて〜」は些か安直だと 私は 思います。 ということも、指摘されないと気づかないことでもあるので、何かしらの修正依頼等のコメントがあったらアクションしたほうが良いとも思います。 以上長文・乱文失礼しました。
guest

0

リファラからが実装しやすいのでしょうけど
jsでの処理は所詮クライアント側でずるされる可能性があるので
きちんとしたいならセッションなどサーバー側のデータ保持が必要です

投稿2020/02/05 02:43

yambejp

総合スコア116724

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

例として、親ページがログイン画面、子ページがマイページのようなものを指しているのでしたら、SurferOnWwwさんが質問への追記で記載いただいているように、JavaScriptのReferrer機能を使用すると再現できるのではないかと思います。

ざっくりと言えば前ページのURL情報をReferrerが持ってくれているので、それが親ページのURLと一緒なら行ける、違っていたら行けないという形にすれば実現できそうです。

referrer - MDN

投稿2020/02/05 02:10

vnsa7221

総合スコア348

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

アンカーリンク(ページ内リンク)とかだとURLが別になって親ページからしかいけないとかできそうですが

html

1<a href="#aaa">子へ</a> 2 3<!-- 略 --> 4 5<div id="aaa"> 67<div>

ちがうか

投稿2020/02/05 01:51

sola-msr

総合スコア876

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/02/05 02:04

> 親ページと子ページは別のページにしたいです。 ということだそうですが?
sola-msr

2020/02/05 02:05

URLが異なる=別ページと認識したのですよ
退会済みユーザー

退会済みユーザー

2020/02/05 02:09

> URLが異なる=別ページと認識したのですよ 質問者さんのフィードバックを待ちます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問