Как исправить ошибку Uncaught TypeError: не удалось выполнить createObjectURL на «URL»: не было найдено ни одной функции, соответствующей предоставленной подписи.

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

В основном мне удалось сохранить видео в 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>


person John    schedule 05.02.2019    source источник
comment
Возможный дубликат Не удалось выполнить createObjectURL для URL-адреса:   -  person Jack Bashford    schedule 05.02.2019


Ответы (1)


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

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

Наверное, у вас есть что-то вроде

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

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

person Ryan Dabler    schedule 05.02.2019
comment
Я думаю, что это как-то связано с браузерами, он отлично работает в Mozilla для разработчиков и показывает только эту ошибку в Chrome - person John; 07.02.2019
comment
Интересно. Я никогда не занимался разработкой с использованием FF. Мне нужно будет проверить, как FF использует indexeddb, потому что странно, что они будут такими разными для чего-то, что есть веб-API. Как выглядит типичный документ в вашем IDB, который содержит файл большого двоичного объекта, который вы хотите извлечь? - person Ryan Dabler; 07.02.2019
comment
Я понял это. Это было что-то действительно глупое. Когда я передавал ключ методу get, я заключал ключ в двойные кавычки, тогда как его число не было строкой. Поэтому я просто удалил двойные кавычки, теперь он работает. . спасибо за указатели и все - person John; 08.02.2019