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

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

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

Google Chromeは携帯、テレビ、デスクトップなどの様々なプラットフォームで利用できるウェブブラウザです。Googleが開発したもので、Blink (レンダリングエンジン) とアプリケーションフレームワークを使用しています。

iframe

HTMLのタグ<iframe>です。<iframe>は、ドキュメント内に""inline frame""を作るHTML要素で、同じページでセパレートしているドキュメントが表示されるようにします。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

2回答

2752閲覧

「アクセス失敗するiframeの後に置いたalert()が正しく動かない」という現象の原因が知りたい(Chrome)

ss_sasasa

総合スコア8

Chrome

Google Chromeは携帯、テレビ、デスクトップなどの様々なプラットフォームで利用できるウェブブラウザです。Googleが開発したもので、Blink (レンダリングエンジン) とアプリケーションフレームワークを使用しています。

iframe

HTMLのタグ<iframe>です。<iframe>は、ドキュメント内に""inline frame""を作るHTML要素で、同じページでセパレートしているドキュメントが表示されるようにします。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

1グッド

4クリップ

投稿2020/06/27 17:15

編集2020/06/28 14:51

現象

chromeでiframeのあるページを表示しようとする際に気になる挙動をする箇所があり、なぜこうなるのか気になったので質問します。

以下のようなhtmlで、ダイアログボックスがOKボタンをクリックする前に閉じられるという現象がありました。(URLは再現用の例で、アクセス失敗するものなら何でもOKです。最初にこの現象が起きた際は、レスポンスが返ってこないサーバのIPアドレスがhttps://xxx.xxx.xxx.xxx/index.htmlのような形で指定されていました。)

html

1<iframe src="https://1/"></iframe> 2<script>alert("test");</script>

原因が気になって「chrome iframe alert closed」などで検索してみたのですが、それらしい内容は見つかりませんでした。
どうしてこのような挙動になるのか、教えていただきたいです。

確認できた動作条件など

  • iframeに設定するURLはアクセス失敗するもの(Err_Address_Unreachableエラー)
  • iframeの読み込みが失敗した瞬間、表示されているダイアログボックスが勝手に閉じられているようである
  • Chromeでは発現するが、FireFoxやEdgeでは発現しなかった(通常通り、OKをクリックするまでalert()が閉じられない)
  • chromeのコンソールには特にエラーなど出ていない

html

1<!-- 以下のソースの場合、alert(1)のOKを手動で押したあとにalert(2)のみが勝手に閉じられる --> 2<script>alert(1);</script> 3<iframe src="https://1/"></iframe> 4<script>alert(2);</script> 5<script>alert(3);</script>

環境

  • Windows 10
  • Chrome 83.0.4103.116(最新版)
miyabi_pudding👍を押しています

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

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

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

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

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

miyabi_takatsuk

2020/06/28 09:24

コンソールにてどのようなエラーが出ているか、などは確認されましたでしょうか? chromeのセキュリティか、バグによるものだとは思いますが・・・。
ss_sasasa

2020/06/28 09:51

コンソールにエラーなどは出ていませんでした。 私もchromeのバグを疑っているのですが、私が調べられなかっただけでなにか原因についてご存知の方もいらっしゃるのでは…と投稿してみた次第です。
guest

回答2

0

現象が再現されないケース

下記HTMLは、「1,2,3」全て手動で [OK] を押下できます。

HTML

1<!DOCTYPE html> 2<script>alert(1);</script> 3<iframe src="https://test.example/"></iframe> 4<script>alert(2);</script> 5<script>alert(3);</script>

ネットワークアドレス(192.168.1.0 and 192.168.3.0)でも現象は再現しませんでした。
(一応、現在参加しているネットワークアドレスにして、http://も試しましたが、現象は再現できませんでした)
下記HTMLは、「1,2,3」全て手動で [OK] を押下できます。

HTML

1<!DOCTYPE html> 2<script>alert(1);</script> 3<iframe src="https://192.168.1.0/"></iframe> 4<script>alert(2);</script> 5<script>alert(3);</script>

現象が再現可能なケース

下記HTMLは、「1,3」手動で [OK] を押下できますが、「2」は自動的に [OK] が押下した状態となります。

HTML

1<!DOCTYPE html> 2<script>alert(1);</script> 3<iframe src="https://1/"></iframe> 4<script>alert(2);</script> 5<script>alert(3);</script>

そもそも、「https://1/」のURLは**不正**であり、Google Chromeが内部的に何を参照しているかをChrome Developper Toolsの [Network] タブで確認したところ、

https://0.0.0.1/

を参照していました。
そこで当該URLで再検証したところ、同じ結果となりました。
下記HTMLは、「1,3」手動で [OK] を押下できますが、「2」は自動的に [OK] が押下した状態となります。

HTML

1<!DOCTYPE html> 2<script>alert(1);</script> 3<iframe src="http://0.0.0.1/"></iframe> 4<script>alert(2);</script> 5<script>alert(3);</script>

ブロードキャストアドレス(255.255.255.255)に変更しても、同じ結果となりました。
下記HTMLは、「1,3」手動で [OK] を押下できますが、「2」は自動的に [OK] が押下した状態となります。

HTML

1<!DOCTYPE html> 2<script>alert(1);</script> 3<iframe src="https://255.255.255.255/"></iframe> 4<script>alert(2);</script> 5<script>alert(3);</script>

0.0.0.0/8

そもそも、「"0.0.0.1" のIPアドレスは何なのか」という話になりますが、0.0.0.0/8 は到達不能(Destination: False)として予約されたアドレスのようです。

再現条件

詳細は不明ですが、

  • 0.0.0.0/8
  • 255.255.255.255 (ブロードキャストアドレス)

のような、一般にブラウザで指定されることのない特別なIPアドレスでは現象が再現されるようです。

Re: ss_sasasa さん

投稿2020/06/28 13:58

編集2020/06/28 15:08
think49

総合スコア18164

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

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

think49

2020/06/28 14:58

@ss_sasasa さん 回答に書いた「現象が再現されないケース」はアクセスできないURLになります。
think49

2020/06/28 15:06

.exampleは例示用ドメインとして予約されている為、使用できないはずです。 192.168.1.0もネットワークアドレスの為、使用できません。 また、検証時に私は192.168.1.0のネットワークに参加していないPCで検証していました。
ss_sasasa

2020/06/29 06:06

失礼しました、回答の文意を取り違えていたようです。補足ありがとうございます。
guest

0

ベストアンサー

chromeの中身を解析したわけではなく、挙動を確認しただけなので正確ではないかもしれません。

現象

iframeのsrc読み込み失敗時に1回ESCsendkeyされている(のではないか)

根拠

以下の実験を行いました。

html

1<iframe src="https://1/"></iframe> 2<script> 3 alert('hoge'); 4 alert('hige'); 5</script>

結果:hogeは一瞬表示されたがすぐ非表示になり、higeアラートが表示
→勝手に閉じるalertは1つだけ

html

1<iframe src="https://1/"></iframe> 2<iframe src="https://1/"></iframe> 3<script> 4 alert('hoge'); 5 alert('hige'); 6</script>

結果:hoge higeとも一瞬表示されたがすぐ非表示
→表示失敗iframeが増えると勝手に閉じるalertも増える

html

1<iframe src="https://1/"></iframe> 2<script> 3 var hige = confirm("hige"); 4 console.log(hige); 5</script>

結果:higeコンファームは一瞬表示されたがすぐ非表示になり、consoleにfalse
→alert以外のモーダルも影響を受ける。ESCと同等のキー入力がありそう。

html

1<iframe src="404.html"></iframe> 2<script> 3 alert('hoge'); 4 alert('hige'); 5</script>

結果:hoge higeともアラート表示
→実際にアクセス可能なホストだと発生しない。タイミングの問題としたらalert発生前にiframeの読み込み失敗が発生しているので事前にESCsendkeyされているような挙動ではないか。

環境

Windows10 pro
バージョン: 83.0.4103.116(Official Build) (64 ビット)

投稿2020/06/28 10:21

hope_mucci

総合スコア4447

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

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

miyabi_takatsuk

2020/06/28 10:31

なるほど・・・。 もし、ESCが入力されているなら、 Chromeのセキュリティ措置の可能性が濃厚な気がしますね。
ss_sasasa

2020/06/28 14:42

理解があいまいなので確認したいのですが、 ・アクセス可能なホスト:iframeのURLにリクエスト→通信失敗(すぐ失敗が分かる?)→ESCキー送信→alert()が動く ・アクセス不可能なホスト:iframeのURLにリクエスト→alert()が動く→通信失敗→ESCキー送信→ダイアログが消える という解釈をされている、ということで合ってますでしょうか。
hope_mucci

2020/06/28 15:10

基本的な動作は、HTML記載順に動くので iframe構築→srcアクセス→script実行→alert関数実行 で、ここのどこかに非同期でiframeの読み込み成功・失敗が割り込まれます。 ・アクセス可能なホスト iframe構築→srcアクセス→script実行→alert関数実行→iframe処理完了→エラーがあればESCsend? ・アクセス不可能なホスト(質問で言うhttps://1/ = https://0.0.0.1/) iframe構築→srcアクセス→名前解決エラー→ESCsend→script実行→alert関数実行(sendされたESCがここで処理される)→alertウィンドウ消える だと思われます。 今回は絶対に到達できないIPアドレス0.0.0.1を振られたので即座にエラーが返ります。例えばwww.google.comにするとiframeでのアクセスが拒否されエラーとなりますがこちらは挙動が変わります。F12で見てみるとiframeがdivに置き換わっていたりするので、エラー時の内部処理に理由があるのかもしれません。
m.ts10806

2020/06/28 21:20

>Chromeのセキュリティ措置 これは言えるかもしれません。 結構厳しめの対策してますから。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問