2014-09-09 2 views
1

Я использую PhoneGap Build для создания приложения iOS v7.1 + и используя weinre для отладки. Я использую плагин для медиа-захвата и API файлов для захвата видео в попытке получить его представление base64. Я могу открыть видеомагнитофон, взять видео и вернуть путь к файлу. Затем я использую resolveLocalFileSystemURL(), чтобы получить файл-объект, который требуется readAsDataURL(). Проблема FileReader никогда не вызывает обратный вызов onloadend.PhoneGap FileReader/readAsDataURL Не запускаемые обратные вызовы

Я прошу вас весь день. Помещение console.log() везде, о котором я мог думать. Я проверил, чтобы убедиться, что версия iOS is supported. Каждая переменная - это то, что я ожидаю, но обратный вызов просто не вызывается. Я также попытался настроить все другие обратные вызовы, но ни один из них никогда не вызвал. Я попытался заменить readAsDataURL() на readAsText(), но я все равно получаю bupkis. Я пробовал ждать до пяти минут, так как я решил, что асинхронный вызов может занять немного, но все равно ничего.

Ниже приведен мой код. Ниже находится консольный вывод.

var elements = new Object(); 
elements["video"] = $("#window_incident_create > .video > source")[0]; 

navigator.device.capture.captureVideo(
    function(files) { 
     for (var i in files) { 
      var file = files[i]; 

      var name = file.name; 
      var path = file.fullPath; 
      if (path.indexOf("/private") === 0) 
       path = "file://" + path.substr(8); 
      else 
       path = "file://" + path; 
      var type = file.type; 
      var lastModifiedDate = file.lastModifiedDate; 
      var size = file.size; 

      var reader = new FileReader(); 
      reader.onloadend = function(event) { 
       console.log(3); 
       elements["video"].type = type; 
       elements["video"].src = "data:" + type + ";base64," + event.target.result; 
       console.log(4); 
      }; 

      window.resolveLocalFileSystemURL(
       path, 
       function(entry) { 
        console.log(1, entry.nativeURL); 
        reader.readAsDataURL(entry); 
        console.log(2); 
       }, 
       function(error) { 
        console.log("0-0", error); 
       } 
      ); 
     } 
    }, 
    function(error) { 
     console.log("0-1", error); 
    }, 
    { 
     limit: 1 
    } 
); 

1 "Файл: ///var/mobile/Applications/AB239984-FB9F-43C0-B699-3596AC8A43A8/tmp/capture/capturedvideo.MOV"

+0

Вы когда-нибудь понять это? – Justin

ответ

1

Восстановите свой код. Поместите инициализацию reader и обратный вызов onloadend внутри обратного вызова успеха resolveLocalFileSystemURL.

Что-то вроде этого:

var elements = new Object(); 
elements["video"] = $("#window_incident_create > .video > source")[0]; 

navigator.device.capture.captureVideo(
    function(files) { 
     for (var i in files) { 
      var file = files[i]; 

      var name = file.name; 
      var path = file.fullPath; 
      if (path.indexOf("/private") === 0) 
       path = "file://" + path.substr(8); 
      else 
       path = "file://" + path; 
      var type = file.type; 
      var lastModifiedDate = file.lastModifiedDate; 
      var size = file.size; 

      window.resolveLocalFileSystemURL(
       path, 
       function(entry) { 
        console.log(1, entry.nativeURL); 
        var reader = new FileReader(); 
        reader.onloadend = function(event) { 
         console.log(3); 
         elements["video"].type = type; 
         elements["video"].src = "data:" + type + ";base64," + event.target.result; 
         console.log(4); 
        }; 
        reader.readAsDataURL(entry); 
        console.log(2); 
       }, 
       function(error) { 
        console.log("0-0", error); 
       } 
      ); 
     } 
    }, 
    function(error) { 
     console.log("0-1", error); 
    }, 
    { 
     limit: 1 
    } 
); 
Смежные вопросы