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

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

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

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

Q&A

解決済

2回答

383閲覧

[JavaScript]btn.addEventListener('click', togglePlay);でボタンを押して実行できる関数を、ボタンを押さずに自動実行させたいです。

aguroshou0413

総合スコア20

JavaScript

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

0グッド

0クリップ

投稿2020/12/09 08:04

編集2020/12/09 11:29

前提・実現したいこと

indexedDBに保存されている動画を読み込むプログラムを、ネット上から参照しています。
https://takahiro-kuyama.github.io/indexed-db-movie/

btn.addEventListener('click', togglePlay);でボタンに登録して実行できる関数があります。
この関数をボタンに登録して実行するのではなく、通常の関数のように実行したいです。
FfmpegMethod()の関数の中でtogglePlay;を実行したいのですが、うまく実行されないようです。

JavaScript

1FfmpegMethod() 2{ 3 togglePlay; 4}

該当のソースコード

該当部分のみ抜き出しているため、不具合があるかもしれません。

(function () { var version = 1; var movie_url = './testaa.avi'; var btn = document.querySelector('button'); var video = document.querySelector('#myVideo'); var db_status = document.querySelector('#db_status'); var error_status = document.querySelector('#error_status'); var is_video_loaded = false; var is_db_updated = false; var togglePlay = function () { if (video.paused) { if (!is_video_loaded) { try{ //1.indexedDBを開く //var idbReq = indexedDB.open("/idbfs"); //var idbReq = indexedDB.open("test", version); db_status.innerText = "opening indexedDB"; } catch (e) { error_status.innerText = "IndexedDB is not implemented"; return; } //2.DBの新規作成時、またはバージョン変更時に実行するコード idbReq.onupgradeneeded = function (event) { var db = event.target.result; db_status.innerText = "update database"; //過去にDBを作成したことがなければ作成 if (event.oldVersion < 1 || (event.oldVersion & 0x7fffffffffffffff) < 1) { console.log("create database"); event.target.result.createObjectStore("video", { keyPath: "video_id" }); db_status.innerHTML += "<br> database created" } is_db_updated = true; //onupdateneededで呼ばれたtransactionが終了してから処理を行う(既存のtransactionが新規のtransactionをブロックし合う場合がある) event.target.transaction.oncomplete = function () { var xhr = new XMLHttpRequest(); xhr.open('GET', movie_url, true); xhr.responseType = 'arraybuffer'; //IndexedDBを使用した場合との時間差を明確にするため、XMLHttpRequestのキャッシュを無効化(本来は必要なし) xhr.setRequestHeader('Pragma', 'no-cache'); xhr.setRequestHeader('Cache-Control', 'no-cache'); xhr.setRequestHeader('If-Modified-Since', 'Thu, 01 Jun 1970 00:00:00 GMT'); xhr.onload = function (e) { db_status.innerText = "movie is loaded" try { var transaction = db.transaction("video", "readwrite"); videoStore = transaction.objectStore("video"); var arraybuffer = e.target.response; //データの追加 videoStore.put({ video_id: "1", video: arraybuffer }); var blob = new Blob([arraybuffer], { type: 'video/avi' }); var URL = window.URL || window.webkitURL; video.src = URL.createObjectURL(blob); db_status.innerText = "db is updated"; console.log("updated indexedDB"); } catch (e) { error_status.innerText = e.message; } } xhr.send(); } } idbReq.onsuccess = function (event) { if (!is_db_updated) { db_status.innerText = "opened DB"; var db = event.target.result; //"video"オブジェクトストアを読みreadonly権限付きで使用することを宣言 //var transaction = db.transaction("video", "readonly"); var transaction = db.transaction("FILE_DATA", "readonly"); //オブジェクトストアの取り出し //var videoStore = transaction.objectStore("video"); var videoStore = transaction.objectStore("FILE_DATA"); //オブジェクトストアへ取り出しリクエスト //var getReq = videoStore.get("1"); //動画のパスを手動で入力する //var input_message = document.getElementById("input_message").value; //var getReq = videoStore.get("/idbfs/c614088e1b6ee14d287bd9060496bc47/testMovie.avi"); var getReq = videoStore.get(input_message); //videoオブジェクトストアからのデータの取り出し getReq.onsuccess = function (event) { try { //var //blob = new Blob([event.target.result.video], { type: 'video/avi' }); blob = new Blob([event.target.result.contents], { type: 'video/avi' }); transcodetest(); var URL = window.URL || window.webkitURL; video.src = window.URL.createObjectURL(blob); //db_status.innerText = "db is opened, and success data load"; } catch (e) { error_status.innerText = e.message; } } getReq.onerror = function (event) { db_status.innerText = "db is opened, but failed data load" } } } idbReq.onerror = function (event) { db_status.innerText = "failed db open" } is_video_loaded = true; } video.play(); } else { video.pause(); } }; btn.addEventListener('click', togglePlay);//ここでボタンに登録したtogglePlayは実行できる })(); function FfmpegMethod(parameter) { console.log(parameter.callbackMoviePathName) input_message = parameter.callbackMoviePathName; togglePlay;//この関数を呼ぶようにしても、上手く動かない //idbReq.onsuccess; // C#から指定されていたGameObject名とメソッド名を使ってコールバック処理を行う //unityInstance.SendMessage(parameter.callbackGameObjectName, parameter.callbackFunctionName) }

何か参考になるサイトや、私に足りない説明などありましたら教えていただけると助かります。
よろしくお願いします。

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

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

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

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

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

guest

回答2

0

ベストアンサー

btnをクリックすることでtogglePlayが呼び出せるのであれば、

Javascript

1function FfmpegMethod(parameter) { 2 btn.click(); 3 }

としたら良いのではないかと思いました。

投稿2020/12/09 12:52

Jon_do

総合スコア1373

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

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

aguroshou0413

2020/12/09 13:01 編集

ご回答ありがとうございます。 私が求めていたことが実現できました。 JavaScriptの知識がなかったので、btn.click();でボタンをマウスでクリックしたときと同じ実行をプログラムでできることを分かっていなかったです。 3日ほどずっと悩んでいたので助かります。m(_ _)m
guest

0

投稿2020/12/09 08:09

m.ts10806

総合スコア80850

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

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

aguroshou0413

2020/12/09 09:12

ご回答ありがとうございます。 只今検証したところ、おそらくページの読み込み完了時にイベントが呼ばれるため、FfmpegMethodの関数の中から呼び出すことがうまくできないようです…。(indexedDBに動画を保存した後にFfmpegMethodの関数を呼ぶため、ページの読み込み完了時にイベントが呼ぶことでは良くないのです…。) 私の方でも他にaddEventListernerの引数で発生するイベントのタイミングをうまく調整できないか確認してみます。
aguroshou0413

2020/12/09 10:37 編集

window.addEventListener('mousemove', togglePlay); この設定にすると、indexedDBに動画を保存した後にウィンドウ上でマウスを少しでも動かすとFfmpegMethodの関数が呼ばれて、うまく動作します。 ですが、可能であればwindow.addEventListener(''', togglePlay);で関数を登録したときに一度だけ実行するようにしたいです。もしそのようなことが可能でしたら教えていただけると助かります。m(_ _)m
m.ts10806

2020/12/09 10:51

なるほど。要件的に初歩じゃないですね。 (というか初歩とか書かない方がいいです)
aguroshou0413

2020/12/09 11:28

ご指摘ありがとうございます。質問文を直しておきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問