Autor Zpráva
Pgrlk
Profil
Ahoj existuje nejaka PHP podminka pro vypnuty javascript? A nebo jak by se dalo jinak udelat, ze by se zobrazil nejaky text a neco jineho by se skrylo. Vím, že existuje <noscript>, ale to bych obsah který chci skrýt musel dát do <script> pokud se nepletu. A to nechci. Děkuji za každou radu
anonymníí
Profil *
Pgrlk:
PHP samozřejmě neví, jaké nastavení má klient.
Chamurappi
Profil
Reaguji na Pgrlka:
to bych obsah který chci skrýt musel dát do <script> pokud se nepletu
Můžeš skriptem během načítání stránky nastavit třídu na <html> (tedy změnit document.documentElement.className) a pak podle této třídy zviditelňovat a skrývat, co chceš.
Bubák
Profil
Nějak takhle, tuším, že je to postup, o kterém píše Chamurappi:
http://kod.djpw.cz/kobb

Případně koukni na http://jecas.cz/vypnuty-js
Pgrlk
Profil
Děkuji, ale moc mi to nepomohlo :( potřeboval bych něco s PHP podmínkami, protože když to udělám takto, tak ten text je stále ve zdrojovém kódu a uživateli stačí upravit prvek pomocí nástrojů v prohlížeči.
Radek9
Profil
Pgrlk:
Jaký to má ale smysl? Kdybych si JavaScript zapnul, tak ta data přeci dostanu. Proč by to tedy nemohlo být jen skryté?
Chamurappi
Profil
Reaguji na Pgrlka:
Co to vytváříš, že je bezpečnostně důležité rozhodovat se podle zapnutého JS na straně serveru?

Prohlížeče žádnou HTTP hlavičkou podporované/zapnuté technologie nesdělují. Což je na jednu stranu škoda, na druhou stranu je tvorba webů zajímavější :-)
Str4wberry
Profil
Reakce na Pgrlka:
Děkuji, ale moc mi to nepomohlo

A pročetl jste si ten odkázaný článek celý? Zejména Zapnutý a vypnutý JavaScript » Na straně serveru
_es
Profil
Pgrlk:
Možno sa ti zíde: přesmerovani po 5 sekundach
Pgrlk
Profil
No přesměrování pomocí metatagu, není také moc bezpečné jelikož i když tam nastavím hodnotu 0, jako dobu za kterou se to má přesměrovat, tak se to tam nepřesměruje hned a někdo může zastavit toto refreshováni a zůstane na stránce.
Joker
Profil
Pgrlk:
potřeboval bych něco s PHP podmínkami, protože když to udělám takto, tak ten text je stále ve zdrojovém kódu a uživateli stačí upravit prvek pomocí nástrojů v prohlížeči.
A to vadí? Proč?
Uživatel se zapnutým JS může udělat to stejné a neexistuje skript, který by mu v tom dokázal spolehlivě zabránit.
Co do možnosti manipulace s dokumentem není rozdíl mezi zapnutým a vypnutým JS.

Chamurappi:
Prohlížeče žádnou HTTP hlavičkou podporované/zapnuté technologie nesdělují. Což je na jednu stranu škoda, na druhou stranu je tvorba webů zajímavější :-)
Stejně by to moc použitelné nebylo.
Třeba Flash nainstalovaný a vypnutý na úrovni prohlížeče je podpora ano nebo ne?
Já mám Flash vypnutý na úrovni prohlížeče, ale v případě potřeby ho zapnu jednoduše kliknutím na Flashový prvek. Kdyby to stránka vyhodnotila jako že Flash nemám a prvek mi vůbec neposlala, moc bych to neocenil.
Nebo třeba že prohlížeč umí a má zapnutý JS (klidně nějaké konkrétní verze) ještě neznamená, že jeho DOM umí třeba document.getElementsByClassName, nebo cokoliv jiného.
_es
Profil
Pgrlk:
není také moc bezpečné
Čo si v tomto prípade prestavuješ pod „bezpečnosťou“? Lebo to vyzerá, že si sa pýtal na niečo iné, než potrebuješ.
Pgrlk
Profil
_es: Jen v mém případě není dobré, pokud by uživatel skončil na této stránce s vypnutým JS. Což pomocí tohohle je možné.

Joker: Mám zde už jiný JS a ten provádí určitou akci. Když by uživatel měl vypnutý JS, tak by zůstal u "kroku" 1. Ale poté se pomocí JS provádí něco kde následuje "krok" 2. A k tomuto se už uživatel s vypnutým JS nemá jak dostat (v případě, že by toto bylo pro uživatele nevýhodné, tak bych to neřešil, ale v tomto případě toho může využít oproti lidem se zapnutým JS).
Joker
Profil
Pgrlk:
Když by uživatel měl vypnutý JS, tak by zůstal u "kroku" 1. Ale poté se pomocí JS provádí něco kde následuje "krok" 2. A k tomuto se už uživatel s vypnutým JS nemá jak dostat
Když neprovedení kroku 2 tedy uživateli dá nějakou výhodu, u uživatele se zapnutým JS neprovedení kroku 2 nevadí?
Bubák
Profil
Pgrlk:
Jen v mém případě není dobré, pokud by uživatel skončil na této stránce s vypnutým JS.
Přijdu na stránku, vypnu JS, některé prohlížeče sice stránku po vypnutí JS načtou znova, ale můj oblíbený prohlížeč nikoliv.
Příklad, otevřu stránku Datum v javascriptu
Vypnu JS, hodiny se zastaví.
Zapnu JS, hodiny zase běží.
Pgrlk
Profil
Joker: Ten krok 2 se spustí sám pokud máš zapnutý JS. Pokud tuto stránku zavřeš dřív než se provede krok 2 tak je to v podstatě jedno. Tam jde o to, že po určité době se provádí ten krok 2 a člověk s vypnutým JS se k tomuto kroku nedostane po stanoveném čase.

Bubák: A mohu se zeptat co je to za prohlížeč? Já když jsem to zkoušel v opeře a google chromu, tak po vypnutí script probíhá dál.
Bubák
Profil
Opravdová, nechromovaná Opera.
Amunak
Profil
Pgrlk:
Mohl bys přestat mlžit a říct konkrétně, o co jde? Třeba ti pak dokážeme poradit lépe. Mezi klientem se zapnutým JS a bez JS není moc velký rozdíl (a rozhodně bys ho tam neměl dělat). K přístupnosti pro nejavascriptové klienty se přistupuje tak, že je ve výchozím nastavení všechno zobrazené (třeba to, co se normálně objeví až po kliknutí na něco zajavascriptovaného [krásné slovo :-)]), a pak se to skryje přes JS, když JS funguje. Jednoduchá alternativa třebaq k nějakým složitějším prvkům (jako je odpočet) je prostě <noscript>. Je mýtus, že to musíš párovat se <script> tagem. Pokud se bojíš, že se ti někdo bude hrabat v kódu a vydoluje nějaké zjednodušení (mám pocit, že se pokoušíš o něco hnusného jako nutit javascriptové uživatele třeba čekat na odpočet jako to dělají různé stahovací servery), pak věz, že ten, kdo má nějaké ponětí o tvorbě webu, to dokáže překonat, a těch ostatních 99.9% návštěvníků ani neví, co je to zdrojový kód stránky, javascript, nebo nějaký <noscript>. Myslím, že tady tu minoritu, která ti obejde nějakou zhovadilost, můžeš oželet.
_es
Profil
Bubák, Pgrlk:
Rovnako sa správa aj Firefox.
Pgrlk
Profil
Amunak: Snažím se o to aby pokud člověk něco neprovede do určitého času bude proveden krok 2. Což v případě s vypnutým JavaScriptem bude moct provádět třeba 10minut a poté se přesunout na krok 2 sám. A myslím, že vypnout javascript napadne přece jen více lidí než 0.1%
Radek9
Profil
Pgrlk:
Asi jsi špatně pochopil slovo „konkrétně“ z Amunakova příspěvku.
Amunak
Profil
Pgrlk:
A myslím, že vypnout javascript napadne přece jen více lidí než 0.1%
Jenže když si JS vypnou až dodatečně, stejně bys jim měl naservírovat stejnou stránku jako lidem co JS nemají „vůbec“. Nebo těm to jako nebude fungovat vůbec? Buď si vyber - lidi s vypnutým JS to budou mít znepřístupněné úplně, nebo to všem bude fungovat tak, jak má. A riskuješ, že nějakou zanedbatelnou minoritu napadne podvádět procházením kódu, a budou pak míst stejnou výhodu jako lidi co mají JS vypnutý pořád a všude.

Radek9: Taky mám ten pocit.
juriad
Profil
Pgrlk:
Můžeš na serveru při generování první stránky vygenerovat token - náhodný řetězec platný třeba jen dvě minuty (uložíš si ho do databáze).
Pokud později přijde požadavek a jeho token již platný nebude, uživateli vynadáš.

Toto řešení je bezpečně a bude fungovat bez ohledu na JS.
Joker
Profil
Pgrlk:
Ten krok 2 se spustí sám pokud máš zapnutý JS.
A když budu mít zapnutý JS, ale zabráním tomu, aby se ten krok spustil?

Snažím se o to aby pokud člověk něco neprovede do určitého času bude proveden krok 2.
Pak se nabízí snadná a poměrně neprůstřelná možnost: Ve chvíli přechodu na krok 2 na serveru zkontrolovat, jak dlouho trval krok 1. Buď přímo (porovnat čas přijetí požadavku na krok 1 a na krok 2), nebo jak píše juriad: Společně s krokem 1 poslat token s omezenou dobou platnosti (ideálně by to asi mohl být digitálně podepsaný aktuální čas, ale v PHP asi než se s tím patlat bude lepší použít jednodušší způsob), přičemž pro přechod na krok 2 by byl nutný platný token.
Pgrlk
Profil
Děkuji, i když to není úplně 100% řešení mého problému nakonec jsem to takto vyřešil.

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

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