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

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

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

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

Q&A

2回答

954閲覧

javascriptのLocalStorageからデータを取得できない

somak

総合スコア24

JavaScript

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

0グッド

1クリップ

投稿2023/04/17 23:50

実現したいこと

javascriptのLocalStorageからデータを取得したい

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

パソコンのブラウザの場合は、LocalStorageからデータを取得できているのですが、携帯のブラウザの場合にLocalStorageからデータを取得できずうまく動作しません。

補足情報

設定 > Safari > Cookieをブロック はoffになっています。

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

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

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

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

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

m.ts10806

2023/04/18 00:09 編集

実際のコード、OS(可能なら機種も),ブラウザ バージョンを記載してください。 別のOS,ブラウザの場合はどうかという確認も可能ならやってみて結果を追記してください。 要は、他者が再現可能な情報を提示してください。機能的にブラウザがサポートされてるものであれば尚更現状の内容だけだと答えようがないので
somak

2023/04/18 06:46

返信ありがとうございます。 以下では、googlemapが表示されてるページから、違うページの推移する前に、googlemapの状態をlocalStrageに保存し、再びgooglemapが表示されているページに戻って来た時に元のmapの状態戻すコードの一部です。 ```ページ推移前に実行 window.addEventListener("beforeunload", function() { mapState = {     現在のmapの状態のデータ   }   localStorage.setItem("mapState", JSON.stringify(mapState)); }); ``` ```再度mapが生成されたときに実行される let savedMapState = localStorage.getItem("mapState"); if (savedMapState) { savedMapStateの処理 } ``` iOS 16.3.1 (iPhone 11 Pro) Safari Version 16.3 では、うまく動作しませんでした。 しかし、Android 9 (huawei p20pro) Chrome Version 112.0.5615.47 ではうまく動作しました。
m.ts10806

2023/04/18 06:50

質問は編集できますので
guest

回答2

0

まだ質問が閉じられていないようなので回答します。

iOSで beforeunload は発生しないかも

iOSのブラウザにおいて beforeunload イベントは他のブラウザのように単純なページの遷移では発生しないようです。
(MDNのbeforeunloadイベントを見る限り実装はされているようだがどのタイミングでイベントが発火するのかが不明)

pagehideイベントであればページ遷移時やブラウザの戻る、進む時に発火するようなのでiOS系ではこちらを使えば目的の処理が実装できそうです。
LocalStorageに対してのやり取りも可能なことは以下のコードで確認しました。

js:検証コード

1 window.addEventListener("load", event => { 2 const d = localStorage.getItem("hoge"); 3 // 適当なHTML要素にLocalStorageの中身を出力している 4 document.querySelector("#dt").innerHTML = d; 5 }) 6 7 /* iOS以外のブラウザでは beforeunload, pagehide どちらも発生する可能性があるので注意 */ 8 window.addEventListener("beforeunload", event => { 9 const d = new Date().getTime(); 10 localStorage.setItem("hoge",`beforeunload: ${d}`); 11 }); 12 window.addEventListener("pagehide", event => { 13 const d = new Date().getTime(); 14 localStorage.setItem("hoge",`pagehide: ${d} `); 15 });

追記

iOS にて pagehide イベントで LocalStorage に書き込みはできましたが、 fetch はできませんでした。イベント内で何らかの制限があるようです。
もしかしたらiOSではbeforeunloadイベント自体は発生するがLocalStorageにはこのイベントからアクセスできない制限があるのかもしれません。

参考リンク

https://neightbor.net/blog/beforeunload-confirm/
"beforeunload ios"で検索して最初に表示されたページです。

投稿2023/05/16 04:44

hope_mucci

総合スコア4447

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

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

0

とりあえず

javascript

1if(typeof localStorage=="object"){ 2 localStorage.setItem('test',123); 3 console.log(localStorage.getItem('test')); 4}else{ 5 console.log('unusable'); 6}

投稿2023/04/18 00:53

yambejp

総合スコア115872

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.40%

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

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

質問する

関連した質問