Autor Zpráva
RastyAmateur
Profil
Dobrý večer,

potřebuji si na stránku stáhnout obrázek tak, aby byl uložený a v případě potřeby se načetl (konkrétně v javascriptu přiřadím tagu <img> nový src). Jde o to, že když se obrázek tímto způsobem načítá, tak už dané zařízení není připojené k internetu a tudíž se obrázek nenačte...

Zkoušel jsem čarovat pomocí manifestu, ovšem neúspěšně. Spíš naopak - měl jsem z toho akorát více problémů...

Díky,
RA
RastyAmateur
Profil
Našel jsem jedno možné řešení, ovšem jak je tam napsáno:
jfriend00:
Eventually over time, the browser cache may fill up and toss the oldest things that haven't been used in awhile.

Lze nějak všechny obrázky nuceně držet v paměti? Mám 190 obrázků (celkem cca 4,5MB) a potřebuji, aby se dokázali načíst offline.

Napadají mě dva způsoby:
1) Obrázky si všechny vykreslím do nějakého skrytého divu (pokud se s display:none; nebo opacity: 0; vůbec vykreslí)
2) Vytvořím jeden velký obrázek a pak už je budu pouze vykreslovat pomocí tříd s pozadím, absolutníma pozicema a podobně (viz co používá djpw)

První způsob dle mého názoru není správný a na ten druhý bych si musel dělat script, který by mi všechny fotky sloučil a vytvořil mi CSS soubor s těmi třídami. Tudíž stále hledám řešení v JS (cesty k souborům mám v javascriptu v proměnné)
weroro
Profil
Musí to byť čisté JS? Napadá totiž ma ešte použiť BASE64.
RastyAmateur
Profil
weroro:
Mohl bys to, prosím, blíže popsat? S tímto formátem jsem dělal pouze jednou, nevím, jak to v tomto kontextu implementovat...
Dan Charousek
Profil
RastyAmateur:
Odkud ty obrázky načítáš, že je nemáš k dispozici offline?
RastyAmateur
Profil
Dan Charousek:
Mám je normálně na serveru. Ovšem když načítám stránku, tak tam ty obrázky potřeba nejsou. Dynamicky je měním až později pomocí JS. Ovšem to se děje již mimo internetové připojení.
Dan Charousek
Profil
RastyAmateur:
Jediné řešení, které mě napadá je si je postahovat a jak zmiňoval weroro uložit jako base64 do local storage. Nevím pro jaké potřeby to máš. Local storage nabízí cca 5MB místa. Podle arty.name/localstorage.html Opera umí automaticky navýšit prostor,. Firefox se dá přemluvit k uchování víc dat přes about:config a Chrome, Safari, IE nenabízí způsob jak vynutit víc místa. Jestliže se vejdeš do této kapacity, tak to nebude problém. Je třeba taky myslet na to, že base64 navýší konečnou velikost souboru.
juriad
Profil
Dan Charousek:
Také je možné obrázky zapsat přímo do stránky pomocí data URI jako base64. Pak velikost není omezené localstorage, ale zase se stahují při každém načtení a není možné je cachovat.

Base64 přidává 33% velikosti.
Dan Charousek
Profil
juriad:
Proto jsem se ptal RastyAmateura na ten use-case.

RastyAmateur:

Úplně nerozumím tomuhle:

Mám je normálně na serveru. Ovšem když načítám stránku, tak tam ty obrázky potřeba nejsou.


Dynamicky je měním až později pomocí JS. Ovšem to se děje již mimo internetové připojení.


Co jsem z toho pochopil, tak když se stránka načítá, tak obrázky ještě nenačítáš, ale pracuješ až s nimi později v javascriptu, když už jsi offline. A kdy se ty obrázky tedy načítají když ne při loadu stránky?
RastyAmateur
Profil
Dan Charousek:
Ano. Při loadu stránky je potřebuji nahrát a uložit do paměti. To ovšem aktuálně nedělám, protože ty obrázky se při loadu stránky nepotřebují.

Pokud to dobře chápu, tak si tedy vytvořím nový soubor images.js, ve kterém budu mít var images ={"image1" : "base64-of-image1", "image2" : "base64-of-image2", ...} , který následně nahraji do indexu a ty obrázky budu vkládat pomocí tohoto.

Ovšem pokud naroste velikost o 33%, tak by možná bylo lepší použít variantu [#2]1). Tedy všechny obrázky si vykreslím do nějakého divu, který schovám. Jelikož budou vykreslené, budou se muset držet v paměti a až je budu vykreslovat podruhé, mělo by vše být v pořádku.

Využívat localstorage nechci. Aplikace je tvořená cíleně na iPhone, tudíž by mi nestačila paměť.
Dan Charousek
Profil
RastyAmateur:
Zásadní otázka. Jakmile se jednou načte stránka, může pak dojít k refreshi nebo ne? Jde o to jestli to potřebuejš mít uložený na nějakym trvalejším uložišti jako je právě local storage nebo jestli se to může držet v paměti.
RastyAmateur
Profil
Dan Charousek:
K refreshi může dojít, ovšem pouze vynucením uživatele. Aplikace se sama od sebe nerestartuje (nemám-li to nastavené v configu - lze přizpůsobit)
Dan Charousek
Profil
RastyAmateur:
Omlouvám se, ale teď si přijdu ještě víc zmatený. Můžeš trochu víc přiblížit o co se jedná, protože nerozumím tomu problému, že potřebuješ pracovat s obrázky offline a stránka se může refreshnout. Když se refreshne a ty jsi offline tak ztratíš úplně všechno přeci.
RastyAmateur
Profil
Dan Charousek:
Dobře, nebudu tě mást. Stránka se načte jednou a pokud ji uživatel nezavře, tak už se znovu načítat nebude. Pokud ji zavře, tak samosebou bude muset vyčkat do připojení k internetu, aby ji mohl opět načíst.
Dan Charousek
Profil
RastyAmateur:
Něco takového?
Živá ukázka
RastyAmateur
Profil
Dan Charousek:
Jo, něco takového. Doladím si to pro své potřeby :) Děkuji

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

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