<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title>No-Javascript on akky@サイボウズラボ・ブログ</title>
		<link>https://labs.cybozu.co.jp/blog/akky/tags/no-javascript/</link>
		<description>Recent content in No-Javascript on akky@サイボウズラボ・ブログ</description>
		<generator>Hugo</generator>
		<language>ja</language>
		
		
		
		
			<lastBuildDate>Wed, 08 May 2019 00:00:00 +0000</lastBuildDate>
		
			<atom:link href="https://labs.cybozu.co.jp/blog/akky/tags/no-javascript/index.xml" rel="self" type="application/rss+xml" />
			<item>
				<title>css-only-chat CSSだけで動くブラウザチャット</title>
				<link>https://labs.cybozu.co.jp/blog/akky/2019/05/css-only-chat-css-only-browser-chat/</link>
				<pubDate>Wed, 08 May 2019 00:00:00 +0000</pubDate>
				<guid>https://labs.cybozu.co.jp/blog/akky/2019/05/css-only-chat-css-only-browser-chat/</guid>
				<description>&lt;p&gt;ケビン・クッチャさん(Kevin Kuchta)の&lt;a href=&#34;https://github.com/kkuchta/css-only-chat&#34;&gt;kkuchta/css-only-chat&lt;/a&gt; は、JavaScript を使わない非同期ウェブチャットサーバーです。&lt;/p&gt;&#xA;&lt;p&gt;二つ(以上)のブラウザからこのサーバに接続し、アルファベットをクリックしてメッセージを作り送信すると、同じサーバに接続した他のブラウザでも即時表示される、いわゆるブラウザチャットです。しかし面白いのは、このページで JavaScript は使われていないというところ。&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://labs.cybozu.co.jp/blog/akky/2019/05/css-only-chat-css-only-browser-chat/css-only-chat.png&#34;&gt;&lt;picture&gt;&#xA;  &lt;source type=&#34;image/webp&#34; srcset=&#34;https://labs.cybozu.co.jp/blog/akky/2019/05/css-only-chat-css-only-browser-chat/css-only-chat_hu_f784542b6d5fabe3.webp 480w, https://labs.cybozu.co.jp/blog/akky/2019/05/css-only-chat-css-only-browser-chat/css-only-chat_hu_e211505fdb5a49f1.webp 768w, https://labs.cybozu.co.jp/blog/akky/2019/05/css-only-chat-css-only-browser-chat/css-only-chat_hu_cf8202e93c78cdd5.webp 959w&#34; sizes=&#34;(max-width: 56rem) 100vw, 54rem&#34;&gt;&#xA;  &lt;img src=&#34;https://labs.cybozu.co.jp/blog/akky/2019/05/css-only-chat-css-only-browser-chat/css-only-chat.png&#34; width=&#34;959&#34; height=&#34;793&#34; alt=&#34;&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34;&gt;&#xA;&lt;/picture&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h3 id=&#34;送信側&#34;&gt;送信側&lt;/h3&gt;&#xA;&lt;p&gt;CSS の :active 疑似クラスを使うことで、ある領域をクリックした際に、はじめて画像ファイルを読み込ませることができます。つまり、ボタンが押されたタイミングを画像ファイルの読み込みでサーバ側から検知できるということ。&lt;/p&gt;&#xA;&lt;p&gt;「同じボタンが2度目押された時は(画像はもうブラウザ側にロード済なので)サーバはわからないのでは?」となりますが、たとえば &amp;ldquo;a&amp;quot;&amp;ldquo;a&amp;rdquo; と押した時は、接続しっぱなしの状態で、元のボタンを隠し、新たに「&amp;ldquo;a&amp;quot;を押した」という情報を持った別の画像ファイル名を持つボタンを表示しているようです。これをすべてのボタンに対して行うことで、ボタンが持つ画像ファイルのパスが、過去のすべてのタイプ内容を保持することになります。&lt;/p&gt;&#xA;&lt;h4 id=&#34;受信側&#34;&gt;受信側&lt;/h4&gt;&#xA;&lt;p&gt;表示はどうやって更新してるのか、も解説されています。接続しっぱなしの状態で、これまで送った html が不要になったら、style タグを送って過去の要素を display:none で隠し、新たにページ内容を追記します。&lt;/p&gt;&#xA;&lt;p&gt;これを、自身か他のブラウザから新たなデータが届くまで待機しながら繰り返しているということ。じゃあソースコードはとても長くなるのでは、と思って Chrome でソースを表示しようとしましたが、何も表示されません。Firefox では何千桁もある一行のソースコードを確認できました。&lt;/p&gt;&#xA;&lt;p&gt;今のところデモサイトは用意されていないので、試すには自分で動かす必要があります。&lt;/p&gt;&#xA;&lt;p&gt;via &lt;a href=&#34;https://news.ycombinator.com/item?id=19852105&#34;&gt;Hacker News&lt;/a&gt;&lt;/p&gt;</description>
			</item>
	</channel>
</rss>
