Portál AbcLinuxu, 30. dubna 2025 14:12

HTML5 a ajaxové další/předchozí na fotky

1.11.2010 10:04 | Přečteno: 1421× | poslední úprava: 30.11.2010 17:45

Chtěl jsem do webové fotogalerie přidat přepínání fotky pomocí šipek doleva/doprava. Předělal jsem to teda v railsech na ajax... jenže pak se nemění url a nefunguje zpět a vůbec je to takové ošklivé... a tak jsem začal hledat něco (knihovnu) co by to řešila.... byl jsem zděšen co to jsou všecko za hacky:( Nějak jsem to vyřešil pomocí HTML5, budu rád když mi to zkritizujete.

Obecně se to řeší tak že se mění část url za takovou tou mřížkou (#) protože to je jediné co můžete (zatím) měnit bez reloadu stránky. Ale to je ošklivý hack jak píše tady nějaký chlapík: http://www.kylescholz.com/blog/2010/04/html5_history_is_the_future.html

Prolezl jsem různé knihovny - RHS, jQuery history, bbq - ta byla na mě moc složitá.. Ale všecko mělo nějaké chyby, tlačítko zpět u starých IE se třeba řeší tak že je tam nějaký skrytý iframe, různé timery co kontrolují co 100ms jestli jsme nezmáčkli zpět... prostě je to celé ošklivé.

HTML5 přidává (ano, to HTML5 které si nehoní nad tím že všecko je XMLko ale řeší problémy co jsou;)), přidává mocnou věc a to změnu url bez načtení stránky pomocí pushState o kterém píše ten kylescholz.com. Funguje to v novém Chromiu a Firefoxu 4, jiné věci jsem nezkoušel. Sbastlil jsem tedy něco takového:

  Event.observe(window, 'load', function() {
  window.history.pushState(0, 'pryc', 0);
  window.history.pushState(@photo.id, 'pryc', @photo.id );

})

// Respond to a popstate event.
window.onpopstate = function(e) {
  if (e.state == 0) {
    window.location="back_js_url(@back_section)";
  }
  else if (e.state != null){
    var basedir = document.location.href;
    basedir = basedir.substring(0, basedir.lastIndexOf('/')) + '/';
    new Ajax.Request(basedir+e.state, { method:'get' });
  }
  
};

Můžete mě bít, já javascript neumím a taky se něco tak ošklivého nehodlám učit ale funguje to, na odkazy další/předchozí fotka jsem pomocí :after v Railsech navěsil ještě něco takového:

window.history.pushState(#{photo_prev.id}, 'title', #{photo_prev.id})")

Budu moc rád když mi to pomůžete otestovat na http://www.sigut.net/. V prohlížečích které to umí by se vám tedy při posouvání mezi fotkami mělo měnit url a fungovat tlačítko zpět.

Co mi to pokazí je reload, nevíte jak to vyřešit?

zvlášť rád bych byl kdyby něco zkusil IEčka, až to odladím tak tam přidám testování a v prohlížečích kde to bude fungovat nechám ajax, kde ne tak normální statické přepínání stránek.

       

Hodnocení: 100 %

        špatnédobré        

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

Komentáře

Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře. , Tisk

Vložit další komentář

David Ježek avatar 1.11.2010 10:24 David Ježek | skóre: 83 | blog: Mostly_IMDB
Rozbalit Rozbalit vše Re: HTML5 a ajaxové další/předchozí na fotky
Odpovědět | Sbalit | Link | Blokovat | Admin
Příloha:
V IE8 WXP udělá kliknutí na fotku tohle...
1.11.2010 10:30 phax7 | skóre: 34 | blog: PhaX_blog
Rozbalit Rozbalit vše Re: HTML5 a ajaxové další/předchozí na fotky
Moc díky za test, teď ještě musím zjistit proč:( Dělá mi to i IE6, myslel jsem že to je jen nějaká chyba, ale asi mám něco fakt špatně...
1.11.2010 10:32 phax7 | skóre: 34 | blog: PhaX_blog
Rozbalit Rozbalit vše Re: HTML5 a ajaxové další/předchozí na fotky
http://vladzloteanu.wordpress.com/2009/02/17/ie-unknown-file-type-requestformat-rails-issue/

tohle by mohlo být ono...
1.11.2010 10:36 phax7 | skóre: 34 | blog: PhaX_blog
Rozbalit Rozbalit vše Re: HTML5 a ajaxové další/předchozí na fotky
jop, už jsem to přehodil, v IE6 to už nedělá (ale furt vyskakuje nějaké podivné okno) mohl bys to zkusit znova prosím?
David Ježek avatar 1.11.2010 10:41 David Ježek | skóre: 83 | blog: Mostly_IMDB
Rozbalit Rozbalit vše Re: HTML5 a ajaxové další/předchozí na fotky
V IE8 se to už chová ok - po kliknutí na fotku se zobrazí a procházení šipkami funguje. akorát to teda hází (dole ikonkou, neruší to): Webpage error details
User Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729) Timestamp: Mon, 1 Nov 2010 09:39:49 UTC
Message: Object doesn't support this property or method
Line: 55
Char: 3
Code: 0
URI: http://beta.sigut.net/photos/2048
Message: Object doesn't support this property or method
Line: 88
Char: 202
Code: 0
URI: http://beta.sigut.net/photos/2048
Message: Object doesn't support this property or method
Line: 1
Char: 203
Code: 0
URI: http://beta.sigut.net/photos/2048
...atd...
1.11.2010 10:42 phax7 | skóre: 34 | blog: PhaX_blog
Rozbalit Rozbalit vše Re: HTML5 a ajaxové další/předchozí na fotky
A url se mění nebo nemění?

Na tu chybu mrknu

díky
David Ježek avatar 1.11.2010 10:55 David Ježek | skóre: 83 | blog: Mostly_IMDB
Rozbalit Rozbalit vše Re: HTML5 a ajaxové další/předchozí na fotky
nemění
1.11.2010 10:57 phax7 | skóre: 34 | blog: PhaX_blog
Rozbalit Rozbalit vše Re: HTML5 a ajaxové další/předchozí na fotky
Tak snad v IE9:)
Michal Fecko avatar 1.11.2010 11:25 Michal Fecko | skóre: 31 | blog: Poznámkový blog
Rozbalit Rozbalit vše Re: HTML5 a ajaxové další/předchozí na fotky
IE8 test na abccku? No OK, OK, a aspon pod Wine? ;-)
Jardík avatar 2.11.2010 00:06 Jardík | skóre: 40 | blog: jarda_bloguje
Rozbalit Rozbalit vše Re: HTML5 a ajaxové další/předchozí na fotky
64bit IE8 pod 64bit Wine nefunguje.
Věřím v jednoho Boha.
1.11.2010 11:14 kyytaM | skóre: 35 | blog: kyytaM | Bratislava
Rozbalit Rozbalit vše Re: HTML5 a ajaxové další/předchozí na fotky
Odpovědět | Sbalit | Link | Blokovat | Admin
V opere to funguje tusim dobre. :)
1.11.2010 11:24 FF
Rozbalit Rozbalit vše Re: HTML5 a ajaxové další/předchozí na fotky
Ja myslim ze ne. URL se nemeni. Kliknu na fotku a mam URL treba
http://beta.sigut.net/photos/2046
, klinu na dalsi a zmeni se na
http://beta.sigut.net/photos/2046#
a pak uz pri klikani na dalsi to zustava stale takto. Opera 10.63
1.11.2010 14:11 phax7 | skóre: 34 | blog: PhaX_blog
Rozbalit Rozbalit vše Re: HTML5 a ajaxové další/předchozí na fotky
tak tak, teď jsem zkoušel Operu 10.63 a nemění se to... a zkoušel jsem i Opera 11 a tam to taky nefunguje:(

Takže shrnuto podtrženo to ve stabilních verzích funguje jen v Chrome 7... ale věřím že nakonec se to vyplatí:)

Nemá někdo nainstalovanou tu betu IE9?
AsciiWolf avatar 1.11.2010 15:03 AsciiWolf | skóre: 41 | blog: Blog
Rozbalit Rozbalit vše Re: HTML5 a ajaxové další/předchozí na fotky
IE9 beta - přepínání šipkami funguje, URL se nemění.
1.11.2010 15:13 phax7 | skóre: 34 | blog: PhaX_blog
Rozbalit Rozbalit vše Re: HTML5 a ajaxové další/předchozí na fotky
Díky moc... ale nepotěšil si mě:) Možná to budu muset přehodnotit a nasadit něco ošklivého:(...
1.11.2010 16:12 Zdeněk Burda | skóre: 61 | blog: Zdendův blog | Praha
Rozbalit Rozbalit vše Re: HTML5 a ajaxové další/předchozí na fotky
Odpovědět | Sbalit | Link | Blokovat | Admin
Máš tam nějaký čurbes v logice přepínání mezi fotkama. Na titulní stránce kliknu na fotku a pak kliknu na další, jsem přepnut na další, kterou jsem viděl v náhledech na titulní stránce. Pak kliknu na předchozí a jsem hozen na jinou fotku než bych očekával. Děje se tak když jsou fotky z různých kategorií/alb, nevím jak tomu říkáš. Kliknutí na "zpět na náhledy" vede k přechodu do stránky s náhledy, ale jen konkrétní kategorie (já jsem ale přišel z titulní stránky, tak bych očekával návrat tam).

Po kliknutí na další/předchozí se mi ve Firefoxu (Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.6; en-US; rv:1.9.2.12) Gecko/20101026 Firefox/3.6.12) mění URL na variantu s # na konci. V Safari se to neděje.

-- Nezdar není hanbou, hanbou je strach z pokusu.
1.11.2010 16:20 phax7 | skóre: 34 | blog: PhaX_blog
Rozbalit Rozbalit vše Re: HTML5 a ajaxové další/předchozí na fotky
jj, máš pravdu je to hafo nemocné:) Kdybych tak uměl psát ty testy asi by se to nestalo, hned to jdu opravit... díky moc.

To Safari mě zajímá, tam to normálně přepíná url? tj třeba z http://beta.sigut.net/sections/10-beskydy/photos/2043 se stane po kliknutí na další http://beta.sigut.net/sections/10-beskydy/photos/2042 ?
1.11.2010 16:25 Zdeněk Burda | skóre: 61 | blog: Zdendův blog | Praha
Rozbalit Rozbalit vše Re: HTML5 a ajaxové další/předchozí na fotky
V Safari mění celé URL, tak jak píšeš.

Když už budeš u úprav, zvaž kontrastnější zvýraznění aktuálně prohlížené stránky. Teď je to jen mírně světlejší a musím hledat na které stránce zrovna jsem...
-- Nezdar není hanbou, hanbou je strach z pokusu.
1.11.2010 16:34 phax7 | skóre: 34 | blog: PhaX_blog
Rozbalit Rozbalit vše Re: HTML5 a ajaxové další/předchozí na fotky
> V Safari mění celé URL, tak jak píšeš. luxus, webkit rulez, jaká je to verze prosímtě?

>Když už budeš u úprav, zvaž kontrastnější zvýraznění aktuálně >prohlížené stránky. Teď je to jen mírně světlejší a musím hledat na >které stránce zrovna jsem... máš asi pravdu, zvýrazním to víc, díky.
1.11.2010 16:56 Zdeněk Burda | skóre: 61 | blog: Zdendův blog | Praha
Rozbalit Rozbalit vše Re: HTML5 a ajaxové další/předchozí na fotky
Safari Version 5.0.2 (6533.18.5)
-- Nezdar není hanbou, hanbou je strach z pokusu.
1.11.2010 17:34 phax7 | skóre: 34 | blog: PhaX_blog
Rozbalit Rozbalit vše Re: HTML5 a ajaxové další/předchozí na fotky
Tak snad jsem to spravil.

> zvýraznění aktuálně prohlížené stránky. teď si ale nejsem jist co myslíš, to "Všechny fotografie Beskydy Portrét a akt" a tak? Tam kromě barvy ještě zmizí podtržení... čili to jde docela dobře vidět - ale když by měl někdo nařízené podtrhávání všude tak to bude slabší, to je fakt.
AsciiWolf avatar 1.11.2010 18:25 AsciiWolf | skóre: 41 | blog: Blog
Rozbalit Rozbalit vše Re: HTML5 a ajaxové další/předchozí na fotky
V IE9 je to stále rozbité - nemění se URL při přepínání šipkami.
1.11.2010 18:50 phax7 | skóre: 34 | blog: PhaX_blog
Rozbalit Rozbalit vše Re: HTML5 a ajaxové další/předchozí na fotky
reagoval jsem nejasně, opravil jsem bug že se ukazovaly jiné fotky než měly... to že se nemění to url s tím asi nic nenadělám a pro IEčka to přepnu na standardní verzi bez ajaxu...:(

a netuší někdo z webvývojářů co to sledují jestli by to IE9 měl umět?
1.11.2010 17:40 Neel | skóre: 10
Rozbalit Rozbalit vše Re: HTML5 a ajaxové další/předchozí na fotky
Odpovědět | Sbalit | Link | Blokovat | Admin

V opeře(10.10) se url nemění. Je to ten případ s #.

V Midori (webkit) se url nemění, ale je to jiný případ. Když jsem kliknul na fotku, tak jsem měl zobrazenou pořád url alba a stránky, na které jsem byl. Poklikal jsem parkrát na předchozí a url ukazovala pořád stránku alba, tak jsem dal aktualizaovat stránku a url se spravila, jenže při dalším přepnutí se zase nezaktualizovala. Ještě zkusím zkompilovat novou verzi z gitu.

1.11.2010 17:54 chrono
Rozbalit Rozbalit vše Re: HTML5 a ajaxové další/předchozí na fotky
Aj najnovšia verzia Midori sa správa úplne rovnako.
2.11.2010 21:28 phax7 | skóre: 34 | blog: PhaX_blog
Rozbalit Rozbalit vše Re: HTML5 a ajaxové další/předchozí na fotky
Hmm, to je škoda, ale Midorimu taky předhodím statickou verzi teda.

jo a díky všem za testy...
3.11.2010 14:36 Neel | skóre: 10
Rozbalit Rozbalit vše Re: HTML5 a ajaxové další/předchozí na fotky
I Uzbl.
Gilhad avatar 1.11.2010 20:30 Gilhad | skóre: 20 | blog: gilhadoviny
Rozbalit Rozbalit vše Re: HTML5 a ajaxové další/předchozí na fotky
Odpovědět | Sbalit | Link | Blokovat | Admin
ve Firefoxu 3.5.6 s vypnutym Javascriptem (muj defaultni prohlizec) se po kliknuti na fotku tato otevre, po kliknuti na predchozi/nasledujici se v URL objevi na konci mriz # a fotka tam zustane ta sama. Takova galerie by me fakt nenadchla.
Konqui avatar 1.11.2010 21:02 Konqui | skóre: 18 | blog: Konqui | Rožnov pod Radhoštěm
Rozbalit Rozbalit vše Re: HTML5 a ajaxové další/předchozí na fotky
Je nějaký důvod mít vypnutý JavaScript?
Open/save dialogy z GTK+ jsou nejkřiklavější ukázkou toho nejdebilnějšího software, co vůbec může existovat.
1.11.2010 21:42 chrono
Rozbalit Rozbalit vše Re: HTML5 a ajaxové další/předchozí na fotky
Je nejaký dôvod, prečo to nemôže fungovať aj bez javascriptu? (navyše keď ide len o tak malú úpravu toho kódu)
Gilhad avatar 1.11.2010 23:33 Gilhad | skóre: 20 | blog: gilhadoviny
Rozbalit Rozbalit vše Re: HTML5 a ajaxové další/předchozí na fotky
Protože ho spousta webu zneužívá na nejrůznější otravné účely a zároveň většina zajímavých webů funguje dobře i bez něj. Normálně mám z tohoto důvodu vypnuté i obrázky a najednou je Internet rychlý a přehledný. (O flashi ani nemluvě)
1.11.2010 21:52 phax7 | skóre: 34 | blog: PhaX_blog
Rozbalit Rozbalit vše Re: HTML5 a ajaxové další/předchozí na fotky
Stoprocentně to ošetřím i pro lidi bez javascriptu, teď jen testuju něco jiného...
gtz avatar 1.11.2010 21:26 gtz | skóre: 27 | blog: gtz | Brno
Rozbalit Rozbalit vše Re: HTML5 a ajaxové další/předchozí na fotky
Odpovědět | Sbalit | Link | Blokovat | Admin
Opera 10.53 ,URL se nemění

FireFox 3.6.6 ,URL se nemění
- nejhorší jsou trpaslíci ... Ti Vám vlezou úplně všude
1.11.2010 22:29 petr_p | skóre: 59 | blog: pb
Rozbalit Rozbalit vše Neměnící se URL
Odpovědět | Sbalit | Link | Blokovat | Admin
Ono je totiž ve specifikaci napsáno, že agent nemusí změnu stavu relace (například hodnota URL) promítnout do uživatelského rozhraní. Pouze se po něm požaduje, aby adresa byla vložena do lokální historie a třeba při obnově po pádu použita ta (všimněte si poznámky v části 3.1).
1.11.2010 22:37 phax7 | skóre: 34 | blog: PhaX_blog
Rozbalit Rozbalit vše Re: Neměnící se URL
>Ono je totiž ve specifikaci napsáno, že agent nemusí změnu stavu >relace (například hodnota URL) promítnout do uživatelského rozhraní.

však já mu změním url a zároveň zavolám ajax.request, ne? Nebo úplně nerozumím na co reaguješ:)
1.11.2010 23:49 chrono
Rozbalit Rozbalit vše Re: Neměnící se URL
Reaguje na to, že napr. v Midori to funguje dobre, ale zobrazované URL sa nemení (vlastne sa zmení až vtedy, keď sa použije reload). Takže z toho, či sa mení zobrazované URL sa nedá posúdiť, či to funguje, alebo nie.
2.11.2010 09:49 phax7 | skóre: 34 | blog: PhaX_blog
Rozbalit Rozbalit vše Re: Neměnící se URL
Aha, to mě nenapadlo... ale v těch nových Chrome a Firefoxu se to chová tak že se to mění a přijde mi že takhle to budou nakonec dělat všichni, ne...? Lepší řešení zatím nemám...

Založit nové vláknoNahoru

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.