5

Esiste una grave mancanza di documentazione su come utilizzare il plug-in di file Cordova con la piattaforma WP8.File system WP8/Cordova - qualcuno conosce il codice corretto?

ho un app su Android, iOS e fireOS, il tutto utilizzando il plugin file per visualizzare il contenuto delle directory, scaricare, salvare e aprire i file generati dal mio webservice cui tutti utilizzare il seguente codice:

function listDir() { 
//console.log('listDir'); 
window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, gotFS, fail); 

function gotFS(fileSystem) { 
    //console.log('gotFS. filesystem.root = ' + fileSystem.root.value); 
    fileSystem.root.getDirectory("MyFolder", { create: true, exclusive: false }, gotDir); 

} 

function gotDir(dirEntry) { 
    //console.log('gotDir'); 
    // Get a directory reader 
    var directoryReader = dirEntry.createReader(); 

    // Get a list of all the entries in the directory 
    directoryReader.readEntries(success, fail); 

} 

function success(entries) { 
    var i = 0, sb = ''; 
    sb += '<ul data-role="listview" data-inset="true" id="pdfFiles">'; 
    if (entries.length > 0) { 
     for (i = 0; i < entries.length; i++) { 
      sb += '<li><a href="#" data-src="' + entries[i].toURL() + '"><img src="images/icons/icon_pdf.png" class="ui-li-icon" width="16px" height="16px" alt="PDF Icon" />'; 
      sb += entries[i].name; 
      //sb += '<br />'; 
      //sb += entries[i].fullPath; 
      sb += '</a></li>'; 
     } 
    } else { 
     sb += '<li><p>You do not have any saved reports</p></li>'; 
    } 

    sb += '</ul>'; 
    $('#pdfReports-entries').html(sb); 
    $('ul#pdfFiles').listview().listview('refresh'); 

    //open the pdf file using the fileOpener plugin 
    $('ul#pdfFiles li a').on('click', function() { 

     $this = $(this); 
     window.plugins.fileOpener.open($this.attr('data-src')); 
    }); 
} 

function fail(error) { 
    logError("Failed to list directory contents: " + error.code); 
    sb += '<ul data-role="listview" data-inset="true" id="pdfFiles">'; 
    sb += '<li><p>You do not have any saved reports</p></li>'; 

    sb += '</ul>'; 
    $('#pdfReports-entries').html(sb); 
    $('ul#pdfFiles').listview().listview('refresh'); 
} 

}

WP8 getta il seguente errore alla funzione gotFS:

A first chance exception of type 'System.IO.IsolatedStorage.IsolatedStorageException' occurred in mscorlib.ni.dll 

allora ho provato il codice a this Github, che ancora non è riuscito per creare o leggere qualsiasi directory, ma non lanciare l'eccezione IsolatedStorageException.

Ho chiesto a Google molte volte, ma non è in grado di dare una risposta coerente.

qualcuno sa usare il plug-in di file con WP8?

+0

Hai ottenuto il mio voto +1 in "C'è una grave mancanza di documentazione" :) Solo un'ipotesi, ma ti sei assicurato di dare le autorizzazioni dell'app per accedere al file system? – CodingWithSpike

+0

La tua domanda illustra esattamente il mio punto! Dove/come dovrei controllarlo o abilitarlo? – DaveSav

+0

Ho provato questo, ma 'fileSystem.root.value' è' undefined'. Funziona solo sul dispositivo e non su un emulatore? – Sumit

risposta

2

correlati al mio commento di cui sopra, ma ha voluto un posto dove mettere il codice ...

non ho fatto un WP8 app me stesso, solo iOS e Android, ma forse l'applicazione non ha i permessi giusti ?

Questi sarebbe andato nel file Properties/WPAppManifest.xml, e assomigliano:

<Capabilities> 
    <Capability Name="ID_CAP_WEBBROWSERCOMPONENT" /> 
    <Capability Name="ID_CAP_IDENTITY_DEVICE" /> 
    <Capability Name="ID_CAP_IDENTITY_USER" /> 
</Capabilities> 

E l'elenco di ID capacità disponibile è listed here on MSDN. Anche se l'unico che vedo relativo alla memorizzazione dei file è ID_CAP_REMOVABLE_STORAGE quindi forse non è questo il problema ... Ho pensato che il link sopra potrebbe essere utile però.

+0

Questa è esattamente la risposta. L'aggiunta di ID_CAP_REMOVABLE_STORAGE a WPAppManifest.xml consentiva l'esecuzione del mio secondo esempio di codice. Nota per Apache Cordova; quando si attiva il filesystem WP8, aggiornare anche manifest. Grazie, @CodingWithSpike, per risolvere questo problema. – DaveSav

+0

23 ore più tardi e sfortunatamente questa non sembra essere la risposta completa :(. Window.requestFileSystem richiesta async sembra essere molto lenta su WP8 e ritornerà indefinita -so ho spostato quella richiesta a un evento di caricamento app (usando le promesse sarebbero migliori), ma ancora WP8 si rifiuta di rispettare tutti gli altri plug-in del filesystem della piattaforma Cordova – DaveSav

+0

L'aggiunta di ID_CAP_REMOVABLE_STORAGE ha funzionato per me, non il file API funzionava alla grande. – Gillardo