<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>WEB2.0 trükkök&#124;&#124;WEB2.0 tricks &#187; W3C</title>
	<atom:link href="http://web2.bitbaro.hu/tag/w3c/feed/" rel="self" type="application/rss+xml" />
	<link>http://web2.bitbaro.hu</link>
	<description>HTML, CSS, JavaScript, PHP, Flex, Aptana, Jaxer, Python, Joomla, Administration, Linux</description>
	<lastBuildDate>Sun, 31 Jan 2010 23:14:40 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>hu</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>JavaScript detektálás, ugrás ha nincs JS + W3C valid</title>
		<link>http://web2.bitbaro.hu/2009/03/10/javascript-detect/</link>
		<comments>http://web2.bitbaro.hu/2009/03/10/javascript-detect/#comments</comments>
		<pubDate>Tue, 10 Mar 2009 09:57:55 +0000</pubDate>
		<dc:creator>Wedge</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[hack]]></category>
		<category><![CDATA[W3C]]></category>
		<category><![CDATA[XHTML]]></category>

		<guid isPermaLink="false">http://web2.bitbaro.hu/?p=13</guid>
		<description><![CDATA[Hogyan detektáljuk, hogy a JavaScript engedélyezve van-e a látogató böngészőjében úgy, hogy csak akkor irányítsuk át a felhasználót, ha nincs engedélyezve. Továbbá legyen böngészőfüggetlen a megoldás és a W3C validátor is tekintse szabványosnak.]]></description>
			<content:encoded><![CDATA[<p>Sok ember &#8211; félve vírustól, a böngésző hibáitól, reklámoktól&#8230; &#8211; egyszerűen kikapcsolja a böngészők JavaScript funkcióját. Ez a mai weboldalak ill. webalkalmazások szempontjából elég rossz szokás, mert ilyenkor teljesen működésképtelenné válhat. A felhasználónak meg nem minden esetben jut eszébe, hogy a kikapcsolt JavaScript az oka, hanem inkább az oldal készítőjét okolja. Erre ad megoldást az alábbi módszer. A felhasználót átirányíthatjuk egy statikus oldalra, ahol elmagyarázhatjuk neki, hogy miért is rossz kikapcsolni a JavaScriptet <img src='http://web2.bitbaro.hu/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<h3>Amit el szeretnénk érni</h3>
<ul>
<li>Szeretnénk elérni, hogy a böngésző kikapcsolt JavaScript esetén ugorjon egy hibaoldalra vagy az oldal JavaScript nélküli statikus változatára.</li>
<li>Szeretnénk megtartani az XHTML kompatibilitást</li>
<li>Működjön minden elterjedt böngészőn (Mozilla Firefox, Internet Explorer 6-7-8, Opera, Safari, Google Chrome)</li>
</ul>
<p><span id="more-13"></span>Az itt közölt megoldást nem láttam még publikálva sehol, saját ötlet. Kicsit hackelős, de működik <img src='http://web2.bitbaro.hu/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<h3>A megoldáshoz vezető út</h3>
<p>Ahhoz, hogy JS nélkül tudjunk ugrani az alábbi <em>meta</em> taget lehet használni:</p>
<pre class="xhtml" name="code">&lt;meta http-equiv="refresh" content="0; url=nojs.html" /&gt;</pre>
<p>A fenti sort a headerbe helyezve az oldal azonnal a<em> nojs.html</em>-re ugrik. Ha van JS, ha nincs.</p>
<p>Kézenfekvő lenne, hogy ha van JavaScriptünk, kitöröljük a DOM-ból a fenti sort és kész. De sajnos ez nem működik, mert a böngésző a meta tageket betöltéskor feldolgozza és hiába töröljük a taget, ő akkor is ugrik&#8230;</p>
<p>Másik kézenfekvő megoldás, hogy a fenti sort &lt;noscript&gt;&lt;/noscript&gt; tagek közé helyezzük. A baj ezzel csak az, hogy ez nem szerepelhet a szabvány szerint a headerben, amúgy működne (nem vagyok benne biztos, hogy minden böngészőben). De a feltételeinkben benne volt, hogy az XHTML szabványt be kell tartanunk (legalábbis a validátor szerint).</p>
<h3>A megoldás</h3>
<p>Először álljon itt a kód, később részletesen elmagyarázom:</p>
<pre class="xhtml" name="code">&lt;!-- *** Javascript Detect Hack *** --&gt;
&lt;script type="text/javascript"&gt;&lt;!--
document.write("&lt;\/script&gt;&lt;script&gt;/*");
//--&gt;&lt;/script&gt;
&lt;meta http-equiv="refresh" content="0; url=nojs.html" /&gt;
&lt;script type="text/javascript"&gt;/* */&lt;/script&gt;
&lt;!-- ********* End of hack ******** --&gt;</pre>
<p>A működése nagyvonalakban: Ha van JavaScript, akkor a <em>&lt;meta&gt;</em> tag előtti script rész kommentbe teszi a <em>&lt;meta&gt;</em> taget, vagyis nem fut le. Ha nincs, akkor ugrik.</p>
<p><strong>Soronként</strong> (a kezdő és a vég komment nélkül):</p>
<ol>
<li>A script blokk kezdete. Ha van JavaScript, akkor lefut. A &#8220;&lt;!&#8211;&#8221; HTML komment az elején azért kell, mert a script tartalmaz &#8220;&lt;&#8221;, &#8220;&gt;&#8221; jeleket, amit a validátor hibásnak jelezne, továbbá a &lt;script&gt;-et nem ismerő böngészők (vagy amikben ki van kapcsolva) így kihagyják ezt a részt.</li>
<li>Itt a dokumentumba beírjuk a &lt;script&gt; blokk lezárását, majd rögtön nyitunk is egy újat, amibe egy JS blokkomment nyitását is elhelyeztük. Ezzel kommentezzük ki a &lt;meta&gt;-t.</li>
<li>Ez zárja le a validátornak a &lt;script&gt; taget. Csak azért kell, hogy a validátor örüljön. Ha lefut a fenti kód, akkor ez kommentben lesz, tehát hatástalan.</li>
<li>Ez ugrik, ha nincs JS a <em>nojs.html</em>-re. A nojs.html bármilyen URL-re cserélhető. Ha van JS, akkor ez ugyanúgy a JS blokkomment része, tehát nem foglalkozik vele a böngésző.</li>
<li>Ez szintén a validátornak szóló rész. Ha van js, akkor a nyitó &lt;script&gt; tag a komment része, nincs hatása. A /* még mindig a kommentben van, ez is csak a validátor miatt van, ami azt hiszi, hogy egy új JS részben jár. Egészen a <em>*/</em>-ig tart a blokkomment.  A <em>&lt;/script&gt;</em> pedig lezárja a scriptből megnyitott scriptblokkunkat.</li>
</ol>
<p>A lényeg, hogy két szinten megy a dolog és mind a két szinten helyes. Az egyik, amikor van JavaScript és dinamikusan változtatjuk a kódot, a másik, amikor nincs, és eleve XHTML szabvány szerinti a kód.</p>
<h3> További probléma</h3>
<p>Sajnos van módszer arra, hogy a <em>meta refresh</em>-t is kikapcsolja a felhasználó. Abban az esetben a fenti kód nem működik. Szerencsére ez elég ritkán fordul elő, egy átlagos felhasználó nem tesz ilyet.</p>
<h3>Példa</h3>
<p>Az alábbi url-re tettem egy példát, ahol működés közben lehet megnézni a kódot: <a href="http://web2.bitbaro.hu/jshack/">http://web2.bitbaro.hu/jshack/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://web2.bitbaro.hu/2009/03/10/javascript-detect/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
	</channel>
</rss>
