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

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

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

SafariはAppleのウェブブラウザであり、Mac OS XとiOSのデフォルトのブラウザです。

JavaScript

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

Q&A

解決済

2回答

4284閲覧

JSでlocalstorageを利用してリダイレクトを実装したい

YumaYamada

総合スコア30

Safari

SafariはAppleのウェブブラウザであり、Mac OS XとiOSのデフォルトのブラウザです。

JavaScript

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

0グッド

0クリップ

投稿2017/01/05 07:44

編集2017/01/05 09:06

###前提・実現したいこと
現在apple-mobile-web-app-capableを利用し、ウェブサイトをスマホのホーム画面に追加した際にアプリ風に見せるUIの実装をしています。

しかし、ホーム画面に追加したサイトを再起動すると前回アクセスしたページに行かず、必ずリロードされ、トップページに飛んでしまいます。
例えば、TOPページ→Aboutページに飛んで一旦アプリを中断してホームスクリーンに戻り、またアプリを立ち上げるとAboutページには行かず、TOPページに戻ってしまうという状況です。

そのため、アプリを再起動したときに前回アクセスしたページを開くことが出来るように改良したいと考えています。

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

ex.js

1 // 現在のURL取得 2 var href = window.location.href; 3 // localstorageに保存されているURL(link)が現在のページURLと異なる、又は値が存在しない場合現在のURLを保存する。それ以外は保存されたURLを取得する。 4 if (href != localStorage.getItem("link") || !localStorage.getItem("link")) { 5 localStorage.setItem("link", href); 6 var current = localStorage.getItem("link"); 7} else{ 8 var current = localStorage.getItem("link"); 9} 10 11 //現在のURLと最後にアクセスしたリンク(current)が異なる場合、currentにリダイレクトする 12 if (href != current ) { 13 var redirect_url = current + location.search; 14 //前のページの値を渡す(Google Analytics対策) 15 if (document.referrer) { 16 var referrer = "referrer=" + encodeURIComponent(document.referrer); 17 redirect_url = redirect_url + (location.search ? '&' : '?') + referrer; 18 } 19 location.href = redirect_url; 20 };

###試したこと
下記補足情報のサイトに記載されている方法として、localstorageを使用して前回アクセスした記録を保存し、アプリ再起動時に前回のアクセス記録を呼び出すという方法で上記のコードを記述したのですが、上手く動きません。
上記コードの改善点、又は他のアイディアがあればご教示いただけますと幸いです。

追記(上手く動かない点について):
アプリで再起動した時に以下のように出力され、currentの変数に格納されているURLへリダイレクトするようにしたいです。

href (現在アクセスしているURL)
http://example.com/index.html

current (local storageに保存された最終アクセス時のURL。)
http://example.com/about.html

しかし、現在index.htmlにアクセスすると以下のように表示され、上手く動きません。
href (現在アクセスしているURL)
http://example.com/index.html

current (local storageに保存された最終アクセス時のURL)
http://example.com/index.html

###補足情報
http://stackoverflow.com/questions/4291784/stop-native-web-app-from-reloading-itself-upon-opening-on-ios#answer-4454083

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

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

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

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

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

kei344

2017/01/05 08:35

「上手く動きません」とはどのような状況でしょうか。出ているエラーなどと併せて、具体的に記述されたほうが回答を得られやすいと思います。
YumaYamada

2017/01/05 09:04

ありがとうございます。「試したこと」の欄に追記致しました。
guest

回答2

0

自己解決

自己解決しました。ご回答頂きありがとうございました。

localStorage.js

1 // 現在のURL取得 2var href = window.location.href; 3 4 //URLが保存されていない場合は新規保存し、そうでない場合は最後に保存した値を取得 5 if(localStorage.getItem("link") == null){ 6 localStorage.setItem("link", href); 7 var current = localStorage.getItem("link"); 8 } else { 9 var current = localStorage.getItem("link"); 10 } 11var ref = document.referrer; 12// リファラが存在しない場合(起動時)に起動する 13//現在のURLと最後にアクセスしたリンク(current)が異なる場合、currentにリダイレクトする 14if(ref == ""){ 15 if (href != current ) { 16 location.href = current; 17 }; 18};

投稿2017/01/15 04:34

YumaYamada

総合スコア30

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

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

0

href current redirect_url の値がどうなっているかを確認してみてはいかがでしょうか。動作自体はPCのブラウザでも同じはずなのでデベロッパーツールで確認するか、実機で alert() を呼ぶかどちらかで出来ると思います。

【Chrome デベロッパーツールの使い方概要 | Web Tips】
http://weback.net/utility/1410/

【Web関係者は知っておくべきGoogleChromeデベロッパーツールの使い方 | Ocadweb】
http://ocadweb.com/web/googlechromedevelopertools

また、もしローカル環境でChromeで試しておられるのであれば、localStorage はネットワーク上でないと確認できなかったような気がします。

投稿2017/01/05 09:50

kei344

総合スコア69400

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問