Как исправить «Uncaught TypeError: Не удалось выполнить 'createObjectURL' для 'URL': не найдена функция, которая соответствует предоставленной подписи .." - PullRequest
0 голосов
/ 05 февраля 2019

Я получаю это сообщение об ошибке, когда пытаюсь извлечь и воспроизвести видеофайл (blob), сохраненный в indexedDB. Я в основном открываю транзакцию для базы данных, получаю файл и затем назначаю исходный объект для элемента видео HTML.

По сути, мне удалось сохранить видео в indexedDB, все, что я хочу сейчас сделать - это извлечь и воспроизвести видеофайлы в браузере.Я получаю это сообщение об ошибке. Я немного прочитал и обнаружил, что это может быть связано с устареванием метода «createObjectURL», но я не уверен, как использовать новый подход в моем коде.

 <script type="text/javascript"> 

      (function () {

        if (!('indexedDB' in window)) {
  console.log('This browser doesn\'t support IndexedDB');
  return;
}
    // IndexedDB
    window.indexedDB = window.indexedDB || window.webkitIndexedDB || 
                       window.mozIndexedDB || window.OIndexedDB || 
                       window.msIndexedDB,
    IDBTransaction = window.IDBTransaction || 
                     window.webkitIDBTransaction ||
                     window.OIDBTransaction || window.msIDBTransaction,
    dbVersion = 1.0;
 
    var indexedDB = window.indexedDB;
 
    // Create/open database
    var request = indexedDB.open("Syafunda_Videos");
     
    request.onerror = function (event) {
        // Failed to Open the indexedDB database
    };
 
    request.onsuccess = function (event) {
        db = request.result;
         
        // Open a transaction to the database
        var transaction = db.transaction(["Videos"], "readwrite");
 
        //Retrieve the video file
        transaction.objectStore("Videos").get("1").onsuccess = function (event) {        
        var videoFile = event.target.result;
        var URL = window.URL || window.webkitURL;
        var videoURL = URL.createObjectURL(videoFile) ;
                       
         // Set video src to ObjectURL        
        var videoElement = document.getElementById("video");
            videoElement.setAttribute("src", videoURL);
 
        var mimeDisplayElement = document.getElementById("vidMimeDisplay");
            mimeDisplayElement.innerHTML = videoFile.type;
        };
    }
})();

</script>

1 Ответ

0 голосов
/ 05 февраля 2019

Скорее всего, проблема связана с тем, что videoFile.

URL.createObjectURL нуждается в объекте Blob для создания URL-адреса для вас, но, скорее всего, videoFile - это обычный объект JavaScript, гдерассматриваемое видео является свойством этого объекта.

Возможно, у вас есть что-то вроде

videoFile = {
    [primaryKey]: "1",
    yourVideo: Blob(...)
};

Как хранится ваш документ?Возможно, вам понадобится дополнительно извлечь видеофайл из объекта event.target.result.

...