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

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

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

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

JavaScript

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

Q&A

解決済

2回答

5304閲覧

スマホ版のChromeで、なぜかjsでアラートを表示後、リロードができない件

yayak

総合スコア66

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

JavaScript

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

0グッド

0クリップ

投稿2018/12/17 03:03

例えば、コメントをPOSTした後にページをリロードする際、以下のように、php処理の中でJavaScriptによるアラートを表示させ、その後JavaScriptでページをリロードしています。

// POSTの処理などが終わった後に・・・ $url = ( empty($_SERVER['HTTPS']) ? 'http://' : 'https://' ) . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']; echo '<script>alert( "コメント有難うございます。" );</script>'; //アラートを表示 echo '<script>location.href = "$url";</script>'; //リロード exit();

上記のコードで、PCでは、Chromeやその他の主要ブラウザで、アラート表示後にページをリロードできるのですが、スマホのChromeブラウザですと、うまくいくときと、いかないときがあります。

うまくいかない時は、「投稿自体はできるが、アラートも表示されず、リダイレクト(リロード)の途中のような、左上で通信中のマークの円がぐるぐる回った状態のまま、ずっと真っ白な画面のままになってしまう」状態になります。

履歴・キャッシュ・Cookieの削除した直後に上記のコードを実行すると、「うまくいかない時」の状態になります。

※スマホでも、Chromeブラウザ以外、Safariブラウザなどでは、履歴・キャッシュ・Cookieの削除を行った直後でも、アラート表示後にページをリロードという想定した処理が行えます。
※アラートの処理を消すと、スマホのChromeブラウザで履歴・キャッシュ・Cookieの削除した直後でもリロードの処理は正常に行えます。

なぜ、スマホ版のChromeブラウザでは、履歴・キャッシュ・Cookieの削除した直後、jsでアラート表示後にページをリロードしようとすると、アラートも表示されずに画面が白い状態で止まってしまうのか、原因が全然わかりません。

どなたか、原因の予想がつくお方がいらっしゃいましたら、どうか、お教え頂けましたら幸いです。

何卒、宜しくお願い致します。

(スマホはの機種は関係ない気がしますが、念のため記すとiPhone7を使用しています。)

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2018/12/17 03:44

このコードではうごいたとしても上手くいってるパターンは無いはずですが
m.ts10806

2018/12/17 04:11 編集

$urlという変数に保管されたアドレスに遷移しようとしているわけではなく$urlというアドレスに遷移しようとしているので。 PHPの変数展開の問題ですね。
yayak

2018/12/17 05:55

こちらで質問させて頂く際に、焦って変数展開されない書き方をしてしまいました、申し訳ございません。 本番のコードでは echo '<script>location.href = "' . $url . '";</script>'; //リロード で記載されていて、そのうえで質問に記載した状況になっています。。 紛らわしいことをしてしまい、本当に申し訳ございません。
m.ts10806

2018/12/17 06:02

質問は編集できるので適宜対応してください。まあ今回は「提示ミス」も含めて解決までの流れと捉えて、次からは提示ミスしないように気を付けてくださいね
yayak

2018/12/17 06:04

はい<(_ _)> 受験のときに先生に励まされたとき以来の涙が。。
m.ts10806

2018/12/17 06:07

それは大袈裟な…。そうは見えないかもしれませんが私はあくまで淡々と解決に向けたコメントをしているだけなので…
yayak

2018/12/18 12:06

あれから、mts様に「alertは画面をいったん待機状態にするのでブラウザや「OK」を押すタイミング如何では今起きている現象のようなものがでてもおかしくはないです。」とお教え頂いたことを機に、headerで遷移させる方法と、そしてセッションを利用したフラッシュメッセージで類似の動作を実現させることができました。一人で勉強していると心折れそうなとき、teratailで教えて頂けることも感謝なのですが、人との関わりを、「淡々」の中にも感じることができ、感謝です。いつか「初級者」を抜け出して、回答できる側になりたいです。
guest

回答2

0

ベストアンサー

alertは画面をいったん待機状態にするのでブラウザや「OK」を押すタイミング如何では今起きている現象のようなものがでてもおかしくはないです。

代案と言ってはなんですが、phpのheaderにて完了画面に遷移させてalertにてそのメッセージを表示させてはいかがでしょうか?
ブラウザによる違いはなくなるのでほぼ確実に意図通りに動作するようになると思います。

投稿2018/12/17 03:28

m.ts10806

総合スコア80765

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

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

yayak

2018/12/17 05:07

headerにて完了画面に遷移させてalertにてそのメッセージを表示させる方法、ぜひ試させて頂きます! 本当に自身の不出来が悔しいです。 今から試してきます!
m.ts10806

2018/12/17 05:12

まあそこは何にどの程度比重を持たせるかという考え方部分になってきますね。 サーバー側の処理はブラウザによる影響はほぼないですから、それで悩みがひとつ減ると思えばある程度サーバー側に任せるのもありです。
yayak

2018/12/17 05:30

// POSTの処理などが終わった後に・・・ $url = ( empty($_SERVER['HTTPS']) ? 'http://' : 'https://' ) . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']; header('Location: ' . $url); echo '<script>alert( "コメント有難うございます。" );</script>'; exit(); 上記のようにコードを変えてみたところ、スマホで履歴・キャッシュ・クッキーを削除した直後でも、無事にリロードできたのですが、アラートが表示されませんでした。 貝になりたいです。 もう少しだけ、試行錯誤してみますTT いつもお力を貸してくださり、本当に、感謝申し上げます。
m.ts10806

2018/12/17 05:33

いやheaderで画面遷移してるから当たり前ですよ。 遷移先で画面読み込み時にalert表示させてください
yayak

2018/12/17 05:38

そういう意味だったのですね。 本当に頭が回っていませんでした>< それなら、確実にできますね! mts10806様に、頭が上がりません。有難うございます!!
m.ts10806

2018/12/17 05:40

解決されたようで何よりです
guest

0

iPhone7上でデバッグはしづらいでしょうから、
パソコンのChromeなどで開発ツールなどを駆使して
スマホ表示をシミュレーションします。
あるいは、URLの冒頭に「view-source:」を加えることでhtmlソース表示が出来るようです。

スマホ向けWebページの検証を行う方法 - Qiita

その時、問題の場面で
htmlソースがどう表示されているかを
質問文中に追記してください。

話はそれからだと思います。


echo '<script>location.href = "$url";</script>'; //リロード

echo '<script>location.href = "' . $url . '";</script>'; //リロード

変数のパース ~ PHP: 文字列 - Manual

投稿2018/12/17 03:24

編集2018/12/17 04:31
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

退会済みユーザー

退会済みユーザー

2018/12/17 03:37

そもそも echo '~$url~' だからw
m.ts10806

2018/12/17 03:54

↑それだ。変数展開されない
退会済みユーザー

退会済みユーザー

2018/12/17 04:28

(ノ`Д´)ノ彡┻━┻
m.ts10806

2018/12/17 04:51

気持ち凄く分かります(私もなりました) 意外とそこが抜けてる初学者が多いので悩みどころです。
yayak

2018/12/17 05:05

こちらで質問させて頂く際に、焦って変数展開されない書き方をしてしまいました、申し訳ございません!!!<(_ _)> 本番のコードではm6u様に頂いた echo '<script>location.href = "' . $url . '";</script>'; //リロード で記載されていて、そのうえで質問に記載した状況になっています。。 紛らわしいことをしてしまい、本当に申し訳ございません。土下座ものです。。
yayak

2018/12/17 05:09

そして、パソコンのChromeなどで開発ツールなどを駆使する件につきまして、ぜひ勉強したいと思います。有難うございます<(_ _)>
退会済みユーザー

退会済みユーザー

2018/12/17 05:46

(ノ`Д´)ノ彡┻━┻ (ノ`Д´)ノ彡┻━┻ 物事は正確に伝えよう、間違っていたら訂正を加えよう。 じゃないとみんな不幸になる。
yayak

2018/12/17 05:56

おっしゃる通りです。 本当に、猛省いたします。 申し訳ございませんでした。。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問