Estoy haciendo un proyecto de investigación sobre .epub y he estado tratando de abrirme camino para ejecutar el código JS en un EPUB y mostrar algún tipo de visualización de datos.
En este momento, estoy usando calibre para crear el epub a partir de un archivo HTML. El archivo HTML tiene el código para diagramas de dispersión D3 muy simples y funciona bien cuando se abre el archivo desde el navegador. Sin embargo, después de crear el .epub en calibre, la página está vacía. ¿Saben si esto es posible? Sé que EPUB 3 debería ser algo similar a un navegador moderno, por lo que, en teoría, cualquier cosa que se pueda representar en un navegador también debería ser posible en un .epub. ¿Es porque estoy cargando d3.js? Calibre no proporciona ningún tipo de retroalimentación.
<!-- Code from d3-graph-gallery.com --> <!DOCTYPE html> <meta charset="utf-8"> <!-- Load d3.js --> <script src="https://d3js.org/d3.v4.js"></script> <!-- Create a div where the graph will take place --> <div id="my_dataviz"></div> <script> // set the dimensions and margins of the graph var margin = {top: 10, right: 30, bottom: 30, left: 60}, width = 460 - margin.left - margin.right, height = 400 - margin.top - margin.bottom; // append the svg object to the body of the page var svg = d3.select("#my_dataviz") .append("svg") .attr("width", width + margin.left + margin.right) .attr("height", height + margin.top + margin.bottom) .append("g") .attr("transform", "translate(" + margin.left + "," + margin.top + ")"); //Read the data d3.csv("https://raw.githubusercontent.com/holtzy/data_to_viz/master/Example_dataset/2_TwoNum.csv", function(data) { // Add X axis var x = d3.scaleLinear() .domain([0, 4000]) .range([ 0, width ]); svg.append("g") .attr("transform", "translate(0," + height + ")") .call(d3.axisBottom(x)); // Add Y axis var y = d3.scaleLinear() .domain([0, 500000]) .range([ height, 0]); svg.append("g") .call(d3.axisLeft(y)); // Add dots svg.append('g') .selectAll("dot") .data(data) .enter() .append("circle") .attr("cx", function (d) { return x(d.GrLivArea); } ) .attr("cy", function (d) { return y(d.SalePrice); } ) .attr("r", 1.5) .style("fill", "#69b3a2") }) </script>Creo que no es posible obtener bibliotecas externas, no solo por razones de seguridad, sino ¿cómo puedo leer un libro como este en el bosque sin Internet? Definitivamente es una MALA práctica: los libros electrónicos deben funcionar sin conexión. https://github.com/kobolabs/epub-spec#javascript-support
Su código de muestra genera un SVG. Siempre que incluya el SVG renderizado en su documento EPUB, debería estar bien.
Como ya se mencionó, los EPUB deben poder verse en configuraciones fuera de línea. Y, el motor HTML incorporado de los lectores es un subconjunto de un navegador móvil/de escritorio que puede procesar JavaScript básico en algunos casos, pero no espere hacer nada complejo. Sobre todo porque la mayoría de los dispositivos de lectura tienen una memoria activa muy limitada.
Para compatibilidad con SVG en documentos EPUB, consulte: https://wiki.mobileread.com/wiki/SVG