JavaScript初心者です。
WordPressで作られたWEBサイト内に、Lity.js(https://sorgalla.com/lity/)というモーダル実装用のライブラリを用いて実装しているクリックするとiframeモーダルで開かれる動画があるのですが、iframe内の動画の状態に応じて、動的に要素を追加したり、削除したりするために追加したJavaScriptが本番環境のみで適用出来ない為困っております。
現行サイトはエックスサーバーのレンタルサーバー上で運用されており、サブディレクトリ上に作られたテストサイトでは追加したJavaScriptで問題無く動いていますが、何故か本番用ディレクトリのみで正常に動かず、
iframe内を動的に操作するJavaScriptを阻害する何らかの理由が本番環境のみにあるのか、原因がわかりません。
▼iframe箇所
<div class="lity-iframe-container" style="max-height: 937px;"> <iframe frameborder="0" allowfullscreen="" allow="autoplay; fullscreen" src="https://●●.co.jp/recruit/wp-content/themes/ttt/img/home/Company_introduction.mp4"> #document <html> <head> <meta name="viewport" content="width=device-width"> </head> <body> <video controls="" autoplay="" name="media"> <source src="https://●●.co.jp/recruit/wp-content/themes/ttt/img/home/Company_introduction.mp4" type="video/mp4"> </video> </body> </html> </iframe> </div>
▼追加したJavaScript
$(function () { $(document).on('lity:ready', function (event, instance) { //Lity.jsライブラリの動画を開いて準備出来たら実行 if (navigator.userAgent.match(/Android.+Mobile/)) { // Androidのみ除外 } else { //Android以外は実行 window.setTimeout(function () { var video_elem = $('.lity-iframe-container iframe').contents().find('video'); var iframe = $('.lity-iframe-container iframe').contents(); var img_dir = "https://" + window.location.hostname + "/recruit/wp-content/themes/ttt/img/common/"; $(video_elem)[0].play(); // mac&iphoneで3秒後に再生ボタン表示 $(video_elem).on('pause', function () { //動画を停止した際に、再生ボタン画像を表示しcss付与 $(video_elem).after('<img class="pause-video" src=' + img_dir + 'video_arrow.png>'); $(video_elem).next('img').css({ 'position': 'absolute', 'display': 'block', 'width': '25.600vw', 'height': '19.200vw', 'top': '50%', 'left': '50%', 'transform': 'translate(-50%,-50%)', 'z-index': '10000', 'cursor': 'pointer' }); }); $(video_elem).on('play', function () { //動画を再生した際に、再生ボタン、もう一度再生ボタンを削除 $(video_elem).next('.pause-video').remove(); $(video_elem).next('.ended-video').remove(); }); $(video_elem).on('ended', function () { //動画再生が終了した際に、もう一度再生ボタン画像を表示しcss付与 $(video_elem).next('.pause-video').remove(); $(video_elem).after('<img class="ended-video" src=' + img_dir + 'video_once.png>'); $(video_elem).next('img').css({ 'position': 'absolute', 'display': 'block', 'width': '25.600vw', 'height': '25.600vw', 'top': '50%', 'left': '50%', 'transform': 'translate(-50%,-50%)', 'z-index': '10000', 'cursor': 'pointer' }); }); $(iframe).on("click", ".pause-video", function () { //再生ボタンクリックで動画再生 $(this).prev('video')[0].play(); }); $(iframe).on("click", ".ended-video", function () { //もう一度再生ボタンクリックで動画再生 $(this).prev('video')[0].play(); }); $(iframe).on("mouseenter", '.pause-video', function(){ //再生ボタンホバーで透明化 $(this).css('opacity', '0.5'); }); $(iframe).on("mouseleave", '.pause-video', function(){ $(this).css('opacity', '1'); }); $(iframe).on("mouseenter", '.ended-video', function(){ //もう一度再生ボタンホバーで透明化 $(this).css('opacity', '0.5'); }); $(iframe).on("mouseleave", '.ended-video', function(){ $(this).css('opacity', '1'); }); }, 3000); } }); });
実現したいこと
追加したJavaScriptが本番環境でも動くようにしたい
発生している問題・エラーメッセージ
Uncaught TypeError: Cannot read properties of undefined (reading 'play') at common.js:83:43 (匿名) @ common.js:83 setTimeout(非同期) (匿名) @ common.js:77 dispatch @ jquery.min.js:2 y.handle @ jquery.min.js:2 trigger @ jquery.min.js:2 (匿名) @ jquery.min.js:2 each @ jquery.min.js:2 each @ jquery.min.js:2 trigger @ jquery.min.js:2 h @ lity.min.js:5 c @ jquery.min.js:2 add @ jquery.min.js:2 always @ jquery.min.js:2 x @ lity.min.js:5 y @ lity.min.js:5 dispatch @ jquery.min.js:2 y.handle @ jquery.min.js:2
上記、playを指定している要素が定義されていない、とあるのだと思いますが、テスト環境や、他のお名前.comサーバーやスターサーバーではエラー文が表示されず、本番のみに表示されます。
試したこと
他のレンタルサーバーで問題無く動くかサイトデータを移行し確認したところ、
お名前.comサーバーや、スターサーバーでは問題無く動いておりました。
補足情報
jQuery v3.6.1
WordPress 6.0.2
その他、関係あるかわかりませんが、テスト環境では問題のなかった部分で本番環境のみサーバー上に置いてあるフォントのwoffファイルが読み込まれないという問題もあったため、
htaccessにて下記のコードを記載し、フォントを表示することが出来ています。
htaccess
1<IfModule mod_headers.c> 2 Header set Access-Control-Allow-Origin "*" 3</IfModule> 4<FilesMatch ".(eot|ttf|otf|woff)"> 5 Header set Access-Control-Allow-Origin "*" 6</FilesMatch>
提供している情報が不足しているかもしれませんが、
お心当たりがある方がいらっしゃればご教授いただければ幸いです。
よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー