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

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

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

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

JavaScript

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

Q&A

解決済

1回答

3308閲覧

JavascriptでPC スマホサイトを振り分けた後、スマホでPCサイトを見るとき

m-iwai

総合スコア29

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

JavaScript

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

0グッド

0クリップ

投稿2017/11/09 14:20

###前提・実現したいこと
スマートフォンとPCをユーザーエージェントでJavascriptで振り分けた後、スマホでPCサイトを見るときに他のページに飛ぶたびにスマートフォン表示をさせるかどうかのダイアログが出てしまい煩わしいです。
一旦スマホからPCサイトに入った後は他のリンクを辿ってもダイアログが出ないようにできないでしょうか?

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

スマホでPCサイトのリンクをたどるたびに、スマートフォンサイトを表示するかどうかのダイアログが出てしまう。

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

<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) { if (confirm('スマートフォンサイトに移動しますか?')) { location.href = './sp/'; } } </script>

###試したこと
htaccessでリダイレクトさせる方法も試しましたが、今度はスマホサイトからPCサイトへのリンクが働かず、すべてスマホサイトにリダイレクトされてしまい、困っております。

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

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

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

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

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

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

guest

回答1

0

ベストアンサー

サーバ側でセッションに表示フラグを保存しておくのが一番楽だと思います。
クライアント側だけで表示を切り替えるなら、cookieを使う方法がベストでしょう。
ざっと仕様をまとめると、こんな感じ。

  • PCページのみPC表示フラグチェックを行う
  • cookieにPC表示フラグ(pc)を持たせる
  • スマホからPCページにアクセスしたとき、PC表示フラグが存在しないか立っていない場合、確認ダイアログを表示
  • 確認ダイアログでキャンセルを選んだらPC表示フラグを立てる

javascript

1<script type="text/javascript"> 2 var ua = navigator.userAgent; 3 4 if (!pcCheck()) { 5 if (ua.indexOf('iPhone') > 0 6 || (ua.indexOf('Android') > 0) && (ua.indexOf('Mobile') > 0) 7 || ua.indexOf('Windows Phone') > 0) { 8 if (confirm('スマートフォンサイトに移動しますか?')) { 9 document.cookie = 'pc=0'; 10 location.href = './sp/'; 11 } else { 12 document.cookie = 'pc=1'; 13 } 14 } 15 } 16 17 function pcCheck(){ 18 let flag = false; 19 20 if (document.cookie) { 21 const cookies = document.cookie.split('; '); 22 for (var i = 0; i < cookies.length; i++) { 23 const st = cookies[i].split('='); 24 if (st[0] == 'pc') { 25 flag = Boolean(Number(st[1])); 26 } 27 } 28 } 29 30 return flag; 31 } 32</script>

いったんPC表示フラグを立ててしまうと、ブラウザを終了するまで確認ダイアログが表示されないので注意です。

投稿2017/11/09 22:29

ooeok

総合スコア469

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

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

m-iwai

2017/11/10 05:23

ご教授いただいたソースコードを当て込んだところ、狙い通りに動きました!困り果てており本当に助かりました。 ブラウザを終了させないと再度確認ダイアログが出てこないことまでご注意いただき助かります。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問