Autor | Zpráva | ||
---|---|---|---|
b022d Profil * |
#1 · Zasláno: 13. 12. 2007, 21:48:41
Zdravím,
mám takový drobný problém. Kvůli dokonalému pohodlí uživatelů jsem se rozhodl používat javascript, ale vyvstal mi malý problém. Neměl bych zapomínat na uživatele, který jej zapnutý nemají a nabídnout jim stejně funkční ač obtížnější cestu. K tomu bych ale potřeboval v optimálním případě dostat informaci o zapnutém/vypnutém javascriptu jakkoliv do php proměnné nejlépe hned při prvním přístupu na stránku. Napadlo mne několik složitých řešení, ale ani jedno mi nepřišlo dobré. - dotázat se uživatele nenásilným zaškrtávacím políčkem na to, jestli chce, aby stránka používala javascript nebo né, uložit výsledek do cookies. - na pozadí se pomocí javascriptu pokusit zapsat cookie, které přítomnost otestovat pomocí php. - na pozadí se pomocí AJAXU pokusit skrz php skript zapsat cookie, následně otestovat v dokumentu, jestli se cookie podařilo zapsat. bohužel toto stojí a padá na cookies a znovunačtení stránky. Neexistuje nějaké přímé, elegantní řešení, předdefinovaná proměnná? |
||
Joker Profil |
#2 · Zasláno: 13. 12. 2007, 22:03:35
A k čemu to?
Obvykle stačí prostě napsat HTML stránku pro uživatele, kteří JS nemají a k ní připojit JS, který si jí přeskládá k obrazu svému. |
||
b022d Profil * |
#3 · Zasláno: 15. 12. 2007, 18:29:39
jistě, obyčejnou html stránku ano. Ale v rozsáhlejším projektu by se to hodilo, zvlášť při nabízení zcela jiného řešení (vícestránkové přidání hlasu v anketě x jednostránkové např.)
Rozhodně se nechci pouštět do nějakého přeskládávání stránky, ještě pomocí JavaScriptu, který si taky každý prohlížeč interpretuje jak chce, i když by to bylo také jedno z řešení a asi se k němu uchýlím, nepůjde-li to jinak. Každopádně ptal jsem se jestli existuje způsob, jak onu informaci narvat do proměnné, či neexistuje. |
||
Mastodont Profil |
#4 · Zasláno: 15. 12. 2007, 19:14:00
Předdefinovaná proměnná neexistuje. Ale při prvním přístupu na stránku můžeš do BODY vložit onload s přesměrováním na jinou adresu. Pokud je JS vypnut, přesměrování neproběhne.
session_start(); if (!isset($_GET['js']) && !isset($_SESSION['js']) ) { echo "<html><body onload=window.location.href='index.php?js=yes'></body></html>"; exit; } elseif (isset($_GET['js'])) { $_SESSION['js']= "ano"; header('Location: index.php', TRUE, 303); exit; } Je to dvojí redirect, ale lepší než drátem do oka :) |
||
Joker Profil |
#5 · Zasláno: 15. 12. 2007, 20:14:30
b022d
vícestránkové přidání hlasu v anketě x jednostránkové např. No zrovna tohle bych teda udělal "přepisováním". Například: <a class="hlasovani" href="hlasuj.php?volba=1">volba 1</a> a JS by si potom vytáhl odkazy třídy "hlasovani" a změnil jim href například na "javascript:hlasuj("+volba+")"; |
||
b022d Profil * |
#6 · Zasláno: 16. 12. 2007, 00:08:49
Mastodont
Díky. Každopádně je to škoda, že k tomu není přímý přístup v rámci PHP. Problém nastane u cookies/session, uživatel může rychle vypnout/zapnout než session/cookie expiruje. Ale tak pořád je to nějaké řešení. Joker Ano, jistě. Taky jsem hovořil o komplexnějším projektu, kde by se mi to hodilo u více věcí než u zmiňované ankety, mnohdy zároveň, a na to už mé javascriptové schopnosti nestačí, tak se snažím udělat v PHP co se dá. Mimoto rychlé zjištění zapnutého javascriptu má spousty dalších výhod. |
||
Mastodont Profil |
#7 · Zasláno: 16. 12. 2007, 12:36:01
b022d
Ale pořádně si to otestuj, psal jsem to z hlavy. |
||
ronnie Profil |
#8 · Zasláno: 16. 12. 2007, 13:18:34
"Každopádně je to škoda, že k tomu není přímý přístup v rámci PHP."
Ale je. V PHP existuje funkce get_browser(), která mimo jiné vrací i informaci o tom, jestli je zapnuty javascript. Zkuste na hostingu zavolat skript <?php print_r(get_browser()); Ne vždy je však možné tuto funkci používat, je proto třeba zvláštní nastavení. Nicméně u všech hostingů, kde jsem měl nějaký web tohle fungovalo dobře. |
||
ronnie Profil |
#9 · Zasláno: 16. 12. 2007, 13:27:21
Uff, oprava, pro zjišťování prohlížeče, verze, platformy ap. to funguje podle předpokladů, u cookies, javascriptu to pouze vrací hodnotu, zda je prohlížeč schopen s cookies/javascriptem pracovat. Takže nic, omlouvám se.
|
||
Mastodont Profil |
#10 · Zasláno: 16. 12. 2007, 18:42:47 · Upravil/a: Mastodont
Tak jsem si ten svůj výplod vyzkoušel a je tam problém, že bez JS to vždy skáče do toho prvního IF, čili tam by nemohlo být prázdné body, ale verze stránek pro vypnutý JS. Dalo by se to vylepšit:
session_start(); if (!isset($_GET['js']) && !isset($_SESSION['js']) && !isset($_SESSION['nojs']) ) { // první vstup na stránku echo "<html><body onload=window.location.href='index.php?js=yes'></body>Máte vypnutý Javascript, funkčnost stránek bude omezená. Pokračujte klepnutím na <a href=\"index.php\">tento odkaz</a>.</html>"; $_SESSION['nojs'] ='ano'; exit; } elseif (isset($_GET['js']) && !isset($_SESSION['js'])) { $_SESSION['js']= "ano"; unset ($_SESSION['nojs']); header('Location: index.php', TRUE, 303); exit; } if ($_SESSION['js']) // a dál normálně rozlišovat verze |
||
b022d Profil * |
#11 · Zasláno: 18. 12. 2007, 21:00:28
Díky moc všem. Zkombinuji nově naučené a až si javascript pořádně osahám, pustím se do zpříjemňování, problém se zdá být vyřešen.
|
||
Marek Prokop Profil |
#12 · Zasláno: 18. 12. 2007, 21:56:40
Dovolil bych si připomenout, že existuje značka <noscript>.
|
||
Mastodont Profil |
#13 · Zasláno: 19. 12. 2007, 06:37:48
Marek Prokop
Samozřejmě, ale pokud tuto informaci mám už v kódu, mohu posílat jednu verzi stránky, ne dvě. |
||
b022d Profil * |
#14 · Zasláno: 19. 12. 2007, 21:07:37
Marek Prokop
Jak říká Mastodont, pomocí noscript se mi nepodaří dostat informaci do php proměné, takže se mi to při "podstrkávání" více verzí stránky vůbec nehodí. |
||
Časová prodleva: 16 dní
|
|||
suky Profil |
#15 · Zasláno: 4. 1. 2008, 19:19:26
$browser = get_browser(); $array = ((array) $browser); while (list ($key, $value) = each ($array)) { if ($key == "javascript") { $zapnuty_js = $value; } } echo $zapnuty_js; |
||
Leo Profil |
#16 · Zasláno: 4. 1. 2008, 19:23:41
Jak uz tady kdosi napsal, idealni stav je napsat html tak, ze js je jen nastavbou a nedelat specialni verzi stranek pro js. Pokud uz pouzivate neco jako onload v body, pak
1, onload je moc pozde (az po nacteni vsech obrazku apod.), uzivatel uz si stranku cte a pak mu zmizi... 2, misto window.location.href= pouzijte metodu replace, prosim, at neblokujete tlacitko Zpet... Leo |
||
Časová prodleva: 1 rok
|
|||
littlemaple Profil |
#17 · Zasláno: 24. 6. 2009, 21:06:43
get_browser() vrací schopnosti browseru. Pokud browser zvládá JavaScript nebo Cookies, neznamená to, že je uživatel nevypnul.
|
||
Časová prodleva: 17 dní
|
|||
PetrPN Profil * |
Co takhle zapsat javascriptem cookie?
a pak to ověřit PHP? To nikoho nenapadlo? <script language="javascript" type="text/javascript"> var js_cookie= "js_on"; function uloz() { var datum= new Date(); var datum_exp= new Date(); datum_exp.setDate(datum_exp.getDate() + 1); document.cookie= js_cookie+ "=" +escape(datum.getTime()) + ";expires=" + datum_exp.toGMTString(); //alert("cookie uloženo!"); } uloz(); </SCRIPT> Moderátor Alphard: Obarven kód a smazáno pár nadbytečných otazníků.
|
||
Bubák Profil |
#19 · Zasláno: 12. 7. 2009, 07:37:41 · Upravil/a: Bubák
PetrPN
Kup si novou klávesnici, zasekávají se to některé klapky. Nenapadlo tě, že se hledá způsob, který bude nezávislý na zapnutých obrázcích, cookies a dalších technologiích? Ocituji hned z prvního příspěvku, který jsi zřejně nečetl pořádně, napadlo to rovnou tazatele a hned si uvědomil nevýhody: „- na pozadí se pomocí javascriptu pokusit zapsat cookie, které přítomnost otestovat pomocí php. ... bohužel toto stojí a padá na cookies a znovunačtení stránky. Neexistuje nějaké přímé, elegantní řešení, předdefinovaná proměnná?“ |
||
PetrPN Profil |
#20 · Zasláno: 12. 7. 2009, 15:23:13 · Upravil/a: PetrPN
Nevím co mám s klávesnicí.. Kopíruju to rovnou z kodu,kde to dobře funguje..
Co použít frame..?? První hlavní soubor.. index.php <? session_start(); ?> <HTML> <HEAD> <TITLE>aaa</TITLE> <meta http-equiv="Content-language" content="cs"> <meta http-equiv="Content-Type" content="text/html; charset=windows-1250"> <script language="javascript" type="text/javascript"> var js_cookie= "js_on"; var datum= new Date(); var datum_exp= new Date(); datum_exp.setDate(datum_exp.getDate() + 1); document.cookie= js_cookie+ "=" +escape(datum.getTime()) + ";expires=" + datum_exp.toGMTString(); </SCRIPT> </HEAD> <FRAMESET FRAMEBORDER="no" BORDER="0" FRAMESPACING="0" ROWS="100%,*"> <FRAME src="sindex.php" MARGINWIDTH="0" MARGINHEIGHT="0"> </FRAMESET> </HTML> a ten odkazovat na řídící sindex.php kde php zohlední ihned přítomnost cookie.. |
||
PetrPN Profil |
#21 · Zasláno: 12. 7. 2009, 15:41:43
Ten druhý sindex.php
<? Header("Pragma: No-cache"); Header("Cache-Control: No-cache, Must-revalidate"); Header("Expires: ".GMDate("D, d M Y H:i:s")." GMT"); session_start(); global $PHPSESSID, $akce, $js_on; If (!IsSet($js_on)): echo "Javascript není zapnutý. Pro správný a komfortnější běh webových stránek je zapotřebí javasctript zapnout.. "; else: echo "Javascript je zapnutý"; endif; |
||
PetrPN Profil |
#22 · Zasláno: 12. 7. 2009, 15:46:46
Myslím,že se tu jedná o zjištění zapnutého javascriptu,tak tu jsem snad správně a snad i ta moje připomínka bude k něčemu..
|
||
Časová prodleva: 4 měsíce
|
|||
Jan Turoň Profil * |
#23 · Zasláno: 20. 11. 2009, 14:25:06
potřeboval jsem znát JS už při generování v PHP
- má-li uživatel JS vypnut, zobrazím mu selectboxy se všemi options (vykreslení prohlížeči trvá dlouho) - má-li uživatel JS zapnut, načítají se jen některé options přes AJAX (což je mnohem rychlejší a přehlednější) úspěšně jsem otestoval tohle: // body v přihlašovacím formuláři (v roce 2066 už snad bude problém s JS neaktuální) <body onload="document.cookie='js=1; expires=Fri, 6 Nov 2066 20:01:20 UTC; path=/';"> // php potom kdekoliv v podstránkách zjistí JS <?php if ($_COOKIE["js"]) ... ; ?> Enjoy! |
||
Joker Profil |
#24 · Zasláno: 20. 11. 2009, 15:45:23
Jan Turoň:
„úspěšně jsem otestoval tohle:“ To bych se docela divil, protože tohle nezjistí nastavení JS už při zpracování stránky v PHP, ale až při načtení další stránky. Navíc to počítá s tím, že si příštích skoro 60 let nezměním v prohlížeči nastavení JS. Když vlezu na web, zjistím nějaký mimořádně otravný JS a přes Upravit místní nastavení (v Opeře) pro ten web JS zablokuju, najednou web přestane fungovat. Když tomu webu navíc zablokuju cookies (nebo je prostě vymažu), zase začne fungovat. |
||
Časová prodleva: 26 dní
|
|||
jklasdf Profil * |
#25 · Zasláno: 16. 12. 2009, 18:08:55
Jan Turoň:
> potřeboval jsem znát JS už při generování v PHP > - má-li uživatel JS vypnut, zobrazím mu selectboxy se všemi options (vykreslení prohlížeči trvá dlouho) > - má-li uživatel JS zapnut, načítají se jen některé options přes AJAX (což je mnohem rychlejší a přehlednější) Prostě to, co se má zobrazit při vypnutém javascriptu dej do tagu <noscript></noscript> a při zapnutém se to vykreslovat nebude. Jenom se načte pár proměnných do php, jestli je tam budeš mít, ale to není zas tak velká časová ztráta. E-mail na centrum.cz používá asi toto řešení: Do tagu <noscript> napíší: Nemáte zapnutý js, vstupte do <a href="bez_js.php">zjednodušené verze</a>. |
||
Časová prodleva: 14 let
|
0