Estoy construyendo un lector de epub simple. Estoy usando epub.js. Quiero que la aplicación cargue la última página, sea cual sea la página en la que se encontraba el usuario antes de cerrar el libro/lector.
Aquí está mi código:
const epubBook = "{{ bookpath }}"; var book = ePub(epubBook); var rendition = book.renderTo("viewer", {manager: "continuous", flow: "scrolled", width: "100%", height: "100%", snap: true } ); var displayed = rendition.display(); book.ready.then(function() { const stored = localStorage.getItem(book.key() + '-locations'); //console.log('metadata:', book.package.metadata); bookTitleDiv.innerHTML = book.package.metadata['title'] if (stored) { return book.locations.load(stored); } else { return book.locations.generate(1024).then( ()=>{ localStorage.setItem(key, book.locations.save()); }).catch( err => console.error("error generating locations: ", err)); // Generates CFI for every X characters (Characters per/page) } }).then(function(location) { // This promise will take a little while to return (About 20 seconds or so for Moby Dick) localStorage.setItem(book.key() + '-locations', book.locations.save()); });Si solo guarda el número de página, su código se romperá una vez que un usuario cambie el tamaño de fuente del libro o cambie el tamaño del lector. En ese caso, su número total de páginas puede aumentar/disminuir y solo confiar en el número de página podría llevarlo a la página incorrecta o podría terminar saliendo de los límites (su número de página> cantidad de páginas del libro).
Una forma segura de guardar la página sería guardar la cadena de posición CFI de esa página (en lugar del número de página). Estas cadenas se ven así: epubcfi(/6/4[chap01ref]!/4[body01]/10[para05]/2/1:3) .
let ubicación = this.rendition.currentLocation();
let cfiString = ubicación.start.cfi; // esto es lo que quieres guardar
this.rendition.display(cfiString);