0

我正在使用Visual Studio和cordova工具构建一个小型应用程序。该应用程序显示一系列问题,并在每个问题上,用户可以拍摄多张照片并在其中绘制。img从ms-appdata:///本地不显示使用Winjs/cordova

该应用程序目标为Windows 8.1,但未来将瞄准android,所以我试图不使用本机窗口功能。

在应用程序中有一个覆盖层,用户可以使用cordova-pluggin-camera拍照。拍摄的照片然后显示在img元素中,然后将其复制到要绘制的画布元素中,并且当用户将照片(用户绘图)保存到ms-appdata://local/XXX.png时。 图像被正确保存,我检查了它的文件系统,它在那里,是一个有效的PNG文件。

这是我使用写,使用科尔多瓦-插件文件(V 4.1.1-dev的)图像以一个文件的代码:

window.resolveLocalFileSystemURL(store, function (dir) { 

       console.log("got main dir", dir); 
       //gravar imagem para ficheiro   
       dir.getFile(fileAnotacao, { create: true }, function (file) { 
        console.log("got the file", file); 

        setTimeout(function() { 

         if (apagou) { //apagou a referencia, criar nova e criar ficheiro 
          dir.getFile(fileAnotacao, { create: true }, function (file) { 
           writeLog(decodedData, file); 
          }); 
         } else 
          //grava ficheiro 
          writeLog(decodedData, file); 
        }, 1500); 

        //1º apaga ficheiro se existir 
        file.remove(function() { 
         console.log('File removed.'); 
         apagou = true; 
        }, fail); 
       }); 
      }); 

的WRITELOG功能是这样的:

function writeLog(str, lob) { 
    if (!lob) return; 

    lob.createWriter(function (fileWriter) { 

     fileWriter.seek(fileWriter.length); 

     fileWriter.write(str); 
     console.log("ok, in theory i worked"); 
    }, fail); 
} 

将文件保存到磁盘后,我使用两个文件的路径更新命名空间。原来的名字叫做“原始”,而其中的名字叫做“anotacao”。

之后,我使用连接到Winjs Flipview组件的文件名更新第二个名称空间。我使用第二个命名空间,因为我只想显示原始命名空间的子部分中的图像,即来自一个问题。

function AtualizarFotos() { 

    var id = document.getElementById("id_val_foto").innerHTML; 

    //atualizar namespaces com as fotos 
    var idq = id.split("_"); 
    //quest is used to fectch the correct question, so it knows what photos to show 
    var quest = GetPergunta(idq[1]); 
    if (quest) { 
     if (FotosNP.ftList) { 

      FotosNP.ftList.splice(0, FotosNP.ftList.length); 
      quest.Fotos.forEach(function additem(value, index, array) { 
       FotosNP.ftList.push(value); 
      }); 
    //updates a counter 
      document.getElementById("contaFotos").innerHTML = FotosNP.ftList.length; 
     } 
    } 

在HTML中,我有一个模板和连接到FotosNP命名空间的fliview。 如果在绑定字段中放置“原始”,则触发视图正常工作。 如果我将“anotacao”放在绑定字段中,即使我关闭并打开覆盖图,也不会加载图像。

这两张照片都保存到同一个文件夹:ms-appdata:/// local /。

我使用DOM检查器检查了HTML,并且src属性是正确的。 我试过使用Javascript控制台并在图像标签上显示绘制的照片,并且它也不显示。

我已经尝试在更新Flipview命名空间之前设置超时,因为我认为这可能是写入磁盘的某种延迟。

我试过不同的组件,也使用普通的img元素,但它不显示照片。

photo not shown error

如果我关闭并再次运行应用程序,并加载有照片保存的问题,这些照片是正确显示。

我在做文件写错了什么? 请帮忙。

回答

0

经过一段时间的工作,并最终寻求帮助,我发现这确实是一个延迟,由写功能引起的。

我解决了它将命名空间更新放在filewritter的onwriteend事件上。

fileWriter.onwriteend= function (evt){ 
             console.log("ok, in theory i worked"); 
             quest.Fotos.push({ id: idFoto, original: app.lastCapture, anotacao: store + fileAnotacao }); 
             AtualizarFotos(); 
           } 

我已经尝试设置超时,但时间一定不够。 宽度这我得到一些滞后,但至少它的作品。

谢谢。