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

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

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

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

Q&A

解決済

2回答

1478閲覧

JavascriptによるスマホサイトとPCサイトの切り替え

m-iwai

総合スコア29

JavaScript

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

0グッド

1クリップ

投稿2018/01/16 13:50

###前提・実現したいこと
JavascriptでPCサイトとスマホサイト(SPサイト)の振り分けをしています。
URLの例は
PC= https://hogehoge.co.jp/hoge/index.html
SP= https://hogehoge.co.jp/sp/hoge/index.html
となっており、階層構造はほぼ同一です。

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

JavascriptでPCサイトからSPサイトに飛ばした後、SPサイトからPCサイトへのリンク飛ぶ際に再度SPサイトに飛ばされてしまう。スマートフォンからPCサイトへリンクを飛んだ際はSPサイトに飛ばさないようにしたい。

###該当のソースコード

<script type="text/javascript"> var ua = navigator.userAgent; if (ua.indexOf('iPhone') > 0 || (ua.indexOf('Android') > 0) && (ua.indexOf('Mobile') > 0) || ua.indexOf('Windows Phone') > 0) { location.href = './sp/'; } </script>

###試したこと

.htaccessも試したのですが、.htaccessですとスマートフォンでPCサイトを見る際、全てのリンク先でSPサイトに飛んでしまい、うまく行きませんでした。

###補足情報(言語/FW/ツール等のバージョンなど)
HTML5 CSS3

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

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

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

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

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

guest

回答2

0

ベストアンサー

クッキーを使うのであれば、以下の処理を実装すれば、いいと思われます。
・初回訪問かどうかクッキーより判定する
・初回訪問の場合は、クッキーに登録し、ユーザーエージェントより遷移先を判定する
・初回訪問でなければ、そのまま表示させる

例)

javascript

1 <script type="text/javascript"> 2 var cookieKey = 'visit' 3 4 // クッキーから初回訪問かどうか判定する関数 5 var isFirstVisit = function(){ 6 // クッキーの文字列を取得する。 7 // 各クッキーはkey=valueの形式でセミコロン区切りで一つの文字列で保持されている 8 var cookieString = document.cookie; 9 // セミコロンで分割 10 var cookies = cookieString.split(';'); 11 for(var i = 0; i< cookies.length; i++){ 12 // keyとvalueを分割 13 // キーが同じものが存在すればfalse(初回訪問ではない) 14 var key = cookies[i].split('='); 15 if(key === cookieKey){ 16 return false; 17 } 18 } 19 // クッキーにキーが存在しなければtrue(初回訪問) 20 return true; 21 }; 22 23 // 初回訪問かどうかチェックし、初回訪問であれば、 24 // クッキーに登録して、ユーザーエージェントより遷移先を判断 25 if(isFirstVisit()){ 26 // クッキーに登録(有効期限等を指定していないのでブラウザを閉じたら消える) 27 document.cookie = cookieKey + '=true;'; 28 var ua = navigator.userAgent; 29 if ( ua.indexOf('iPhone') > 0 30 || (ua.indexOf('Android') > 0) && (ua.indexOf('Mobile') > 0) 31 || ua.indexOf('Windows Phone') > 0) { 32 location.href = './sp/'; 33 } 34 } 35 </script>

投稿2018/01/17 04:40

LineOfLightning

総合スコア253

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

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

m-iwai

2018/01/17 07:00

丁寧に解説していただきありがとうございます! こちらのコードで試して見たのですが、スマートフォンでSPサイトからPCサイトへのリンクをたどると、やはりSPサイトの方に飛んでしまいました。クッキーがうまく読み込めていないのでしょうか? ブラウザの再起動なども試したのですが。。
LineOfLightning

2018/01/17 07:11

console.log(document.cookie);を仕込んで、クッキーの保存ができているか確認お願いします。 また、空白等の余計な文字が含まれているかもしれないので、その場合は、判定処理を cookieString.includes(cookieKey ); に変えてみてください
m-iwai

2018/01/19 01:19

ご回答いただきありがとうございます。 大変申し訳ないのですが、クッキーやJavascriptに明るくなく苦労してしまい、他の方法(.htaccess)も試しているうちに自己解決してしまいました。 ご教授いただいた方法も大変参考になりました。ありがとうございました。
guest

0

やり方は色々ありそうですが、cookieやlocalstorageを使って、どちらのサイトを見ようとしたいのかを保存しておいて、その判定をしてから、飛ばせば良いのでは?

https://so-zou.jp/web-app/tech/programming/javascript/cookie/
cookieの使い方は、こちらがわかりやすいかと思います。

投稿2018/01/16 14:57

編集2018/01/16 15:09
TakahiroHayashi

総合スコア33

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

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

m-iwai

2018/01/17 02:05

ご回答いただきありがとうございます。cookieにlocalstorageと色々やり方があるのですね。その辺りが無知なので勉強していきたいと思います。 できれば今回はどのようにすべきかご教授願えないでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問