2017-03-29 5 views
0

J'essaie d'utiliser ou de créer et d'écouter des événements lorsque l'utilisateur change la taille de la police de l'EPUB dans un ereader avec Javascript mais je n'ai pas trouvé le chemin.Détecter les changements de police dans EPUB

Ce que j'ai essayé sans succès:

  • Un écouteur d'événement resize.
  • Un événement de minutage qui mesure la taille de la police. Un écouteur qui mesure l'échelle du viewport.

En ebook-viewer (alias spectateur Calibre) Je peux voir dans l'inspecteur que chaque fois que je change la taille de la police les impressions de la console Viewport cfi: /2/4/2/2/1:1. Je vois que lorsque 1:1 change, c'est une sorte d'échelle dans les nombres int.

C'est pourquoi j'ai essayé de détecter l'échelle de la fenêtre avec this ou this.

donc je suppose qu'il est possible que parce que je peux voir l'inspecteur de cuvette ebook-viewer ...

Tous les essais ne fonctionnent pas sur iOS soit.

Mise à jour

Je sais que sur le epubReadingSystem et ses limites. De plus, JS est optionnel pour EPUB3. Ce que je suis en train de résoudre est que dans la poésie espagnole quand un verset est plus grande que la taille de la boîte, il doit être une pause et la ligne suivante doit être aligné à droite avec un support:

A short verse. A very very long [verse.

I compris comment faire ce changement. Le problème est que lorsque l'utilisateur change la police, le calcul doit être fait à nouveau. J'ai essayé de résoudre ce problème en faisant un EPUB fixe, mais iBooks et ebook-viewer permettent à l'augmentation de la police ...

Un exemple de réalisation: jsfiddle.net/dxr9azy7

Répondre

0

Il n'y a aucun moyen fiable de faire ce que vous voulez, où "fiable" signifie "travailler sur un système de lecture EPUB possible". La raison en est que la spécification EPUB ne fournit pas un moyen officiel pour que le document "connaisse" les propriétés du contexte --- par exemple, les paramètres de lecture actuels, comme la taille de la police --- de l'application qui le rend.

Veuillez noter que le support Javascript n'est pas présent dans EPUB 2, et seulement optionnel dans EPUB 3, et de nombreux systèmes de lecture restreignent le type de code Javascript que vous pouvez avoir dans votre EPUB.

La spécification EPUB 3 a introduit un objet epubReadingSystem pour les systèmes de lecture qui prennent en charge Javascript, mais il ne nécessite pas de fournir par ex. les liaisons d'événements qui peuvent être utilisées par le code JS dans l'EPUB pour réagir aux changements, par ex. dans les paramètres de lecture. D'un autre côté, comme la plupart des systèmes de lecture sont construits sur des moteurs de rendu comme WebKit, s'ils vous permettent d'exécuter Javascript, vous pouvez en effet faire du "reverse engineering" et essayer de pêcher les objets globaux corrects qu'ils conservent et le modèle de document qu'ils utilisent pour l'affichage. Avec un peu de chance, vous pourrez peut-être enregistrer vos propres liaisons.Cependant, cette solution nécessiterait beaucoup de temps pour la comprendre, elle fonctionnera uniquement sur le (s) système (s) de lecture que vous avez testé (s), et elle pourrait casser avec l'application mise à jour. En bref, je ne recommande pas d'essayer cette route.

EDIT: BTW, ce que vous demandez est similaire à ce que j'ai implémenté dans ma propre application de lecture EPUB 3: https://www.readbeyond.it/minstrel/developers.html#js mais malheureusement c'est la seule application (que je connais) qui implémente un mécanisme établissant un canal de communication entre JS dans le fichier EPUB et le système de lecture.

+0

J'ai mis à jour le post pour expliquer ce que je veux réaliser c'est 'onFontSizeChange' que vous implémentez. Donc, aucune solution connue à cela? Dans Minstrel, comment décelez-vous ce changement? – NikaZhenya

+0

Pour ce que vous voulez réaliser, le mieux est d'utiliser CSS, au lieu de JS. Vous pouvez lire http://epubsecrets.com/formatting-poetry-in-epub-part-1.php et http://epubsecrets.com/formatting-poetry-in-epub-part-2.php: ces Les articles sont anciens, mais vous pouvez en tirer de bonnes idées sur la façon de formater votre poésie. –

+0

Minstrel est une application hybride, de sorte que le "GUI" est en fait HTML5 + JS en cours d'exécution dans un WebView dans une application native créée par Cordova. Ainsi, quand il ouvre un EPUB, il expose simplement un objet global '' epubReadingSystem'', et quand un événement se produit via l'interface graphique de l'application (par exemple l'utilisateur augmente font => taille de police), s'il y a des callbacks enregistrés par le code JS à l'intérieur de l'EPUB sur cet objet global, ils sont appelés. Voir https://github.com/readbeyond/minstrel/blob/master/cordova/src_minstrel/www/js/rb.epub.reader.js#L4283 et les lignes suivantes. Il y a un exemple EPUB dans la page developers.html. –

0

Merci à this post nous avons trouvé un moyen pour détecter le changement de taille de la police dans un EPUB, au moins en calibre, ADE et iBooks pour Mac et iOS. Ce serait bien d'essayer dans Readium et EPUBReader ...

Vous devez créer un iframe:

window.addEventListener("load", function() { 
    iframe = document.createElement("iframe"); 
    iframe.id = "some_id"; 
    iframe.style.top = "0"; 
    iframe.style.left = "0"; 
    iframe.style.width = "100%"; 
    iframe.style.height = "5em"; 
    iframe.style.zIndex = "-1"; 
    iframe.style.visibility = "hidden"; 

    document.body.insertBefore(iframe, document.body.childNodes[0]); 

    window.frames["some_id"].addEventListener("resize", function() { 
     // Event when font size changes. 
    }); 
}); 

Si vous êtes à la recherche d'un script de travail pour la poésie espagnole, see this. Télécharger l'exemple: mobileread.com/forums/attachment.php?attachmentid=155891&d=1490939383.

Merci!