Autor Zpráva
meca
Profil
Drazí dávní přátelé, a dávní zachránci,

jsem fušér a lepič izolepovou páskou, přiznávám a trochu se za to stydím. Ale můj zájem je jinde, zároveň jsem však okolnostmi nucen plácat dohromady kódy. Na projekt www.jaroslavhavlicek.cz (resp. část Dílo) jsem použil čtečku e-knih epub.js, leč narazil jsem na problém, jehož řešení nikde nemohu najít. Totiž:

Dáte-li např. http://www.jaroslavhavlicek.cz/dilo/petrolejove_lampy
V pravém sloupci vyberete "# K MAPĚ" a kliknete na "#4 Vejrychovsko" (důležité, neboť předchozí tři jsou na začátku podkapitol), pošle vás to na umístění v Havlíčkově textu. Vidíte však, že se to stalo jakoby na dvakrát. Nejprve se nahrál daný soubor v epubu (vidíte číslo podkapitoly), a až poté umístění (id="p4" v xhtml souboru v epubu) v textu podkapitoly. To je dané tím, že se spustí dvě vpodstatě totožné funkce, jen ta druhá je posunutá o půl vteřiny (evil is devil, čital som). To je ta lepící páska - a ten první problém. Kdyby tam nebyla ta druhá funkce (jdidva()), je nutné na odkaz "#4 Vejrychovsko" kliknout dvakrát, což je nežádoucí, ale nejde mi to jinak vyřešit.

Je to asi obecnější problém. Jakoby ten epub nebyl nahraný celý a až tím prvním klikem se nahrál daný xhtml v epubu, a až tím druhým klikem se jde dostat na dané umístění. V tomhle případě však dané "řešení" funguje, horší je to když stejný postup dvojího načítání aplikuji na přímé odkazování z mapy.

Tedy např. http://www.jaroslavhavlicek.cz/dilo/petrolejove_lampy#8

To, pokud jste již měli předtím načtenou knihu Petrolejové lampy, funguje. Nebude ale fungovat např. http://www.jaroslavhavlicek.cz/dilo/mana#6, alespoň ne napoprvé. Napodruhé už (možná) ano.

Netušíte, prosím, jak problém vyřešit? Jak - nejspíše - nahrát celou komplet knihu, než se začne cokoli dít? Či jsem vedle a je problém jinde?

Moc děkuji!
m.
juriad
Profil
Zkusme změnit funkci jdi, tak aby přešla na danou adresu dvakrát, ale okamžitě po načtení, nikoli po 0.5 sekundě.
function jdi (kam) {
  var loaded = Book.goto("Text/" + kam); // vrátí promise
  if (kam.indexOf('#') >= 0) { // pokud kam obsahuje mřížku
    loaded.then(function() { // zaregistruje funkci, kterou zavolá po načtení knihy
      Book.goto(kam); // znovu přejde na požadovanou stránku
    });
  }
}
Zkus nahradit všechny výskyty funkce jdidva za tuto. Nemělo by to zhoršit a hádám, že to udělá přesně to, co chceš.
meca
Profil
Bohužel. Při prvním kliknutí se to zachová stejně jako bez jdidva(), a i když proměná kam obsahuje #, skript se nedostane k Book.goto, resp. k alert(), které jsem tam přidal k otestování. Druhé kliknutí pak pošle text na správnou pozici, ale konzole napíše, že loaded is undefined. :/
juriad
Profil
Není mi jasné, jak může loaded být undefined. Kterou přesně verzi epub.js používáš? Jsi si jistý, že je to ta nejnovější?
Zdroják té volané funkce je tady: github.com/futurepress/epub.js/blob/master/build/epub.js#L3207
Zkusím se v tom trochu pohrabat až budu mít čas (v řádu dnů), ale třeba poradí někdo jiný.
meca
Profil
Pro sychr jsem tedy nahrál tu poslední verzi. Přidal jsem ještě jedno zpoždění. Funkci pozn(), která by měla otevírat text na daném místě, jsem dal po otevření knihy, ne body onload=. Občas to vypadá, že to funguje, ale pak se ukáže, že už mam tu knihu nějak nahranou v paměti, či co. A když to vyzkouším později/jinde, tak už to nefunguje.
Chamurappi
Profil
Reaguji na mecu:
Včera mi stránka v Exploreru 10 řekla, že si musím nainstalovat jedenáctku. Dneska na ni koukám na jiném PC v jedenáctce a také nefunguje, tentokrát bez hlášky.
Nebylo by lepší jednorázově převést ePub do nějakého univerzálně čitelného HTML, než spoléhat na pochybně funkční JS knihovnu?
meca
Profil
Chamurappi:
To byla asi moje chyba, předtím. Teď už to, co tak testuji po kamarádech, v 11 fungovat mělo.
O tom jsem přemýšlel dnem i nocí. Ale je právě problém, že tam jsou toky textu i 200 stránkové (normálně jako kniha), což by asi působilo guláš. (Je to tam online kvůli tomu odkazování z mapy...)

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: