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

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

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

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

JavaScript

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

HTML

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

Q&A

解決済

2回答

2335閲覧

iframeにて、子フレーム内の動きを親フレームのJavaScriptで取得する方法

higehige

総合スコア12

iframe

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

JavaScript

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

HTML

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

0グッド

0クリップ

投稿2020/11/16 04:10

非常に簡単な原因な気がするのですが、初心者のためハマってしまっており、お助けいただけますと幸いです。。

チャットボット内の設問のクリックを計測したいのですが、そのチャット領域がiframeとなっています。
そのため、「親フレームから子フレームの動きを計測する」方法を調べていたところ、

https://s8a.jp/javascript-event-iframe

このような記事があり「解決!」と思ったのですが、ローカルで全く同じソースで試してみても、子フレーム内のマウスの動きが計測できません。。

全く同じソースですので、ローカルとWEBでの違いを考えると、jQueryを読み込む前にchild.htmlを読んでしまっていることが原因とも考えたのですが、

html

1<html> 2 <head> 3 <meta http-equiv="content-type" content="text/html; charset=utf-8" /> 4 <script> 5 document.addEventListener('DOMContentLoaded', function () { 6 // 親フレームのイベント 7 document.addEventListener('mousemove', onMouseMove); 8 9 // 子フレームのイベント 10 var iframeElements = document.getElementsByTagName('iframe'); 11 for (var i = 0; i < iframeElements.length; i++) { 12 iframeElements[i].addEventListener('load', (function (element) { 13 return function () { 14 element.contentWindow.document.addEventListener('mousemove', onMouseMove); 15 }; 16 })(iframeElements[i]), false); 17 } 18 19 function onMouseMove() { 20 console.log('マウス動いた!'); 21 } 22 }, false); 23 </script> 24 </head> 25 <body> 26 <main> 27 <p>親フレームです。</p> 28 <iframe src="child.html"></iframe> 29 </main> 30 </body> 31</html>

のように、jQueryを使わない書き方でも、子フレーム内のマウスの動きが計測できない状況です。

http://bl.ocks.org/n0f/raw/79c84cbb0fceb17296ae7a5992fb34fd/

こちらの例では問題なく動いているのですが、全く同じソースなので、なぜローカルだと動かないのかがどうしても分からず。。。

物凄く簡単な理由な気がするのですが、ご教示を頂けますと幸いです。

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

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

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

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

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

guest

回答2

0

ベストアンサー

ローカルで全く同じソースで試してみても

ローカルだから動かない状況かもしれません。file://でアクセスするローカルファイルは、ファイルごとに別オリジンとみなされるため、フレーム外から直接フレーム内へアクセスすることができません。

投稿2020/11/16 04:15

maisumakun

総合スコア146018

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

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

yambejp

2020/11/16 04:20

たしかにローカルがネックになっているかもしれませんね
higehige

2020/11/16 06:34

ローカルには、そのような制約があるのですね。。 恥ずかしながら、知りませんでした。。 ご指南、誠にありがとうございます!!
guest

0

(子)フレーム側のソースにjsを記載すればよいのでは?

投稿2020/11/16 04:19

yambejp

総合スコア116724

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

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

higehige

2020/11/16 06:33

ご回答ありがとうございます!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問