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

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

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

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

Q&A

解決済

1回答

533閲覧

Javascriptで、オブジェクト(?)の中身を取得するには?

17dez

総合スコア12

JavaScript

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

0グッド

0クリップ

投稿2019/05/19 11:57

編集2019/05/19 12:11

JSでオブジェクトの中身を取得したい

lightbox系のプラグインで、fancybox3というプラグインがあり、それをサイトで利用しています。
https://fancyapps.com/fancybox/3/docs/
type:iframeのslideを作り、そのiframeにYouTube動画を差し込んで、いろいろ操作したいのですが、
iframeのidが取得できなくて困っています。

中身をconsoleに表示してみましたが、この中の、「id」を取得するには、どうしたら良いのでしょうか。
かなり初歩的なことだと思うのですが。。。。

イメージ説明

※上記画像は、「← ← ← コレ」で表示したものになります。

Javascript

1jQuery.fancybox.open({ 2 type: "iframe", 3 opts: { 4 smallBtn: false, 5 animationEffect: false, 6 width: '100%', 7 height: '100%', 8 baseTpl: 9 '<div class="fancybox-container" role="dialog" tabindex="-1">' + 10 '<div class="fancybox-bg" style="opacity:1;background-color:rgba(0,0,0,.97);"></div>' + 11 '<div class="fancybox-inner">' + 12 '<div class="fancybox-toolbar">{{buttons}}</div>' + 13 '<div class="fancybox-stage"></div>' + 14 "</div>" + 15 "</div>", 16 touch: { 17 vertical: false, 18 momentum: false 19 }, 20 beforeLoad: function(instance,current){ 21 console.info( current ) //← ← ← コレ 22 var tag = document.createElement('script'); 23 24 tag.src = "https://www.youtube.com/iframe_api"; 25 var firstScriptTag = document.getElementsByTagName('script')[0]; 26 firstScriptTag.parentNode.insertBefore(tag, firstScriptTag); 27 28 // 3. This function creates an <iframe> (and YouTube player) 29 // after the API code downloads. 30 var player; 31 function onYouTubeIframeAPIReady() { 32 player = new YT.Player(id_name, { 33 height: '360', 34 width: '640', 35 videoId: 'XXXXXXXXX', 36 events: { 37 'onReady': onPlayerReady, 38 'onStateChange': onPlayerStateChange 39 } 40 }); 41 } 42 43 // 4. The API will call this function when the video player is ready. 44 function onPlayerReady(event) { 45 event.target.playVideo(); 46 } 47 48 // 5. The API calls this function when the player's state changes. 49 // The function indicates that when playing a video (state=1), 50 // the player should play for six seconds and then stop. 51 var done = false; 52 function onPlayerStateChange(event) { 53 if (event.data == YT.PlayerState.PLAYING && !done) { 54 setTimeout(stopVideo, 6000); 55 done = true; 56 } 57 } 58 function stopVideo() { 59 player.stopVideo(); 60 } 61 } 62 }, 63}); 64

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

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

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

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

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

m.ts10806

2019/05/19 11:59

実際のコードをご提示ください。
17dez

2019/05/19 12:12

反応ありがとうございます。
guest

回答1

0

ベストアンサー

解決策と言うよりデバッグしてみた経過みたいな感じの回答です。
もう少し情報確認できれば回答に追記するかもしれません。

通常は[.]つなぎでとれるはずなんですけど、current.$iframe時点でundefinedになりますね。
確かに辿れば提示のようにIDは出てきてはいます。
current.$slideはとれるのですけども。current.$iframeはundefined。

もしかしたら、beforeLoad時点では参照不可なオブジェクト(それかまだ値未設定)なのかもしれませんね。
参照可能となる別のタイミングがあるのかもしれません。

追記:
ちなみにbeforeLoadではなくafterLoadでは$iframeの内容も出力されたので、辿れそうに思います。
下記、参考まで。

js

1 afterLoad : function(instance, current) { 2 console.log(current.$ifame); 3 },

投稿2019/05/19 12:59

編集2019/05/19 13:20
m.ts10806

総合スコア80850

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

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

17dez

2019/05/19 13:14

検証ありがとうございます。 そうなんですよ。。 beforeShowでもundefinedになるし、その他はターゲットがない状態だと発火すらしません。 でもcurrentにはきちんと入っているので、currentから直接取得できればいいんですが、方法が分からない次第です。
m.ts10806

2019/05/19 13:23

もし質問時点でご存知の内容があれば「ここまでは確認した」「ここは調べた」という項目を記載しておいてもらえたらと。二度手間三度手間になります。 一応、別の方向から確認した状況を追記しました。 見た感じでは「before**のイベントでは取得不可能」かもしれませんね。
17dez

2019/05/19 13:32

iframeもsrcを指定しないと、current.$iframeでは出力されなかったみたいです。 検証ありがとうございました。
m.ts10806

2019/05/19 13:32

なるほど。確かにsrcないと表示する先がないですから、オブジェクト生成されないということかもしれませんね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問