<?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>INSPIRE TECH &#187; JavaScript</title>
	<atom:link href="http://inspire-tech.jp/tag/javascript/feed/" rel="self" type="application/rss+xml" />
	<link>http://inspire-tech.jp</link>
	<description>株式会社インスパイアデザインのプログラマーである家富正幸が、デザインやシステム開発、ソーシャルメディアや最近のトレンドなど、Webに関する様々な情報を発信しているブログです。</description>
	<lastBuildDate>Fri, 29 Jan 2016 05:25:58 +0000</lastBuildDate>
	<language>ja</language>
		<sy:updatePeriod>hourly</sy:updatePeriod>
		<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=3.8.41</generator>
	<item>
		<title>Video-jsを利用して動画をループ再生させる際、2回目の再生以降に「再生ボタン」が表示されたままになる問題を修正する方法</title>
		<link>http://inspire-tech.jp/2012/11/video-js%e3%82%92%e5%88%a9%e7%94%a8%e3%81%97%e3%81%a6%e5%8b%95%e7%94%bb%e3%82%92%e3%83%ab%e3%83%bc%e3%83%97%e5%86%8d%e7%94%9f%e3%81%95%e3%81%9b%e3%82%8b%e9%9a%9b%e3%80%812%e5%9b%9e%e7%9b%ae%e3%81%ae/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=video-js%25e3%2582%2592%25e5%2588%25a9%25e7%2594%25a8%25e3%2581%2597%25e3%2581%25a6%25e5%258b%2595%25e7%2594%25bb%25e3%2582%2592%25e3%2583%25ab%25e3%2583%25bc%25e3%2583%2597%25e5%2586%258d%25e7%2594%259f%25e3%2581%2595%25e3%2581%259b%25e3%2582%258b%25e9%259a%259b%25e3%2580%25812%25e5%259b%259e%25e7%259b%25ae%25e3%2581%25ae</link>
		<comments>http://inspire-tech.jp/2012/11/video-js%e3%82%92%e5%88%a9%e7%94%a8%e3%81%97%e3%81%a6%e5%8b%95%e7%94%bb%e3%82%92%e3%83%ab%e3%83%bc%e3%83%97%e5%86%8d%e7%94%9f%e3%81%95%e3%81%9b%e3%82%8b%e9%9a%9b%e3%80%812%e5%9b%9e%e7%9b%ae%e3%81%ae/#comments</comments>
		<pubDate>Fri, 09 Nov 2012 01:30:00 +0000</pubDate>
		<dc:creator><![CDATA[家富 正幸]]></dc:creator>
				<category><![CDATA[その他]]></category>
		<category><![CDATA[問題解決]]></category>
		<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://inspire-tech.jp/?p=1461</guid>
		<description><![CDATA[HTML5のVideoプレイヤーとFlashのビデオプレイヤーを併用し、いろいろな環境に合わせて動画再生を行える非常に便利なスクリプト「Video-js」。 HTML5 Video Player &#124; Video.js 私 [&#8230;]]]></description>
				<content:encoded><![CDATA[<div class="component img"><a href="http://inspire-tech.jp/wp-content/uploads/2012/11/video-js.png"><img src="http://inspire-tech.jp/wp-content/uploads/2012/11/video-js-570x198.png" alt="" title="video-js" width="570" height="198" class="alignleft size-large wp-image-1467" /></a></div>
<p>HTML5のVideoプレイヤーとFlashのビデオプレイヤーを併用し、いろいろな環境に合わせて動画再生を行える非常に便利なスクリプト「Video-js」。</p>
<ul>
<li><a href="http://videojs.com/#section5" >HTML5 Video Player | Video.js</a></li>
</ul>
<p>私も多々利用させて頂いて居るのですが、ここにきてタイトル通りのバグ「ループ再生の2回目以降で、再生ボタンが表示されっぱなしになる」に遭遇し、解決したのでその方法を記載します。</p>
<p>まず、バグが発生する環境は下記の通り。</p>
<ul>
<li>Video-jsのFlashプレイヤーで再生をしている</li>
<li>autoplayオプションをON</li>
<li>loopオプションをON</li>
<li>controlsオプションをON</li>
</ul>
<p>HTML5のプレイヤーでも発生するかは未検証です。</p>
<h3><span>原因</span></h3>
<p>Video.jsでは動画の再生・停止などに合わせイベントを発行しており、内部の動作についてもそのイベントに依存して制御を行っているようです。</p>
<p>今回の問題はループ再生の場合にのみ発生するのですが、その発生機序としては下記のようなものでした。</p>
<ol>
<li>1回目の動画再生が開始：playイベントが発生</li>
<li>playコールバックの処理(1)：「再生ボタン」が「display:none」になる</li>
<li>1回目の動画再生が終了：endedイベントが発生</li>
<li>endedコールバックの処理(1)：「ループ再生なら、再度最初から再生」という処理が実行される</li>
<li>2回目の動画再生が開始：playイベントが発生</li>
<li>playコールバックの処理(1)：「再生ボタン」が「display:none」になる</li>
<li><strong>endedイベントに登録された2つめ以降のコールバックが発生</strong></li>
<li>endedコールバックの処理(2)：「再生ボタン」を再表示させる</li>
</ol>
<p>要はコールバックの登録の順番が悪いというもので、endedイベントの最初のコールバックで再生処理を行ってしまっているものだから、endedイベントに登録された2個目以降のコールバックが、なぜかplayイベントの次に実行されるという訳のわからない状態に。</p>
<p>というわけで、このあたりのコードをさくっと修正すればバグも解消します。</p>
<h3><span>コード修正</span></h3>
<p>video.js（version 3.2.0現在）の926行目付近：</p>
<pre class="brush: js">
  init: function(player, options){
    this._super(player, options);

    player.addEvent("play", _V_.proxy(this, this.hide));
    player.addEvent("ended", _V_.proxy(this, this.show));
  },
</pre>
<p>下記のように改善します。</p>
<pre class="brush: js">
  init: function(player, options){
    this._super(player, options);

    player.addEvent("play", _V_.proxy(this, this.hide));
    
    if (!player.options.loop) {
      player.addEvent("ended", _V_.proxy(this, this.show));
    }
  },
</pre>
<p>要は「ループ指定がされていない場合のみ、再生終了時にボタンを再表示してねん」という処理に変更をかけます。</p>
<p>これで晴れて2回目以降の再生でも、再生ボタンがしっかり消えたままになります。</p>
]]></content:encoded>
			<wfw:commentRss>http://inspire-tech.jp/2012/11/video-js%e3%82%92%e5%88%a9%e7%94%a8%e3%81%97%e3%81%a6%e5%8b%95%e7%94%bb%e3%82%92%e3%83%ab%e3%83%bc%e3%83%97%e5%86%8d%e7%94%9f%e3%81%95%e3%81%9b%e3%82%8b%e9%9a%9b%e3%80%812%e5%9b%9e%e7%9b%ae%e3%81%ae/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>DISQUSをスマートフォンで利用する場合にも、FacebookやTwitterでのログインを可能にする方法</title>
		<link>http://inspire-tech.jp/2012/11/disqus_for_smartphone/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=disqus_for_smartphone</link>
		<comments>http://inspire-tech.jp/2012/11/disqus_for_smartphone/#comments</comments>
		<pubDate>Wed, 07 Nov 2012 01:24:01 +0000</pubDate>
		<dc:creator><![CDATA[家富 正幸]]></dc:creator>
				<category><![CDATA[その他]]></category>
		<category><![CDATA[開発]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[サービス]]></category>
		<category><![CDATA[ソーシャルメディア]]></category>
		<category><![CDATA[モバイル]]></category>

		<guid isPermaLink="false">http://inspire-tech.jp/?p=1432</guid>
		<description><![CDATA[WordPress等を利用している場合に、コメントシステムとして大変人気のあるDISQUSというコメントシステムがあります。 詳しくは下記のサイトなどをご覧頂くとして、このDISQUSはPC向けだけでは無く、スマートフォ [&#8230;]]]></description>
				<content:encoded><![CDATA[<div class="component img"><a href="http://inspire-tech.jp/wp-content/uploads/2012/11/disqus_1.png"><img class="alignleft size-large wp-image-1434" title="disqus_1" src="http://inspire-tech.jp/wp-content/uploads/2012/11/disqus_1-570x226.png" alt="" width="570" height="226" /></a></div>
<p>WordPress等を利用している場合に、コメントシステムとして大変人気のあるDISQUSというコメントシステムがあります。</p>
<p>詳しくは下記のサイトなどをご覧頂くとして、このDISQUSはPC向けだけでは無く、スマートフォンなどでも表示できるモバイルテーマが標準で附属しています。</p>
<p>しかしこのモバイルテーマ、なぜかPC向けと違い、FacebookやTwitterでログインする機能が省略されてしまっています。</p>
<p>かといってPC版のインターフェースをスマートフォンで利用しようとすると、コメント部分は普通に利用できるものの、ログインウィンドウが画面からはみ出してしまい、相当解像度の高いスマートフォンではないとログインに支障がでてしまいます。</p>
<ul>
<li><a href="http://inspire-tech.jp/wp-admin/post.php?post=1432&amp;action=edit&amp;message=10">投稿の編集 ‹ INSPIRE TECH — WordPress</a></li>
</ul>
<h3><span>スマートフォン向け対応できるCSSを書いた</span></h3>
<p>DISQUSはAPIの管理画面から、独自にCSSを適用することが可能です。</p>
<p>そこで、PC向けのログインウィンドウをスマートフォンで見た際にも、綺麗に画面内に収まるようカスタムCSSを作成してみました。</p>
<p><span id="more-1432"></span></p>
<pre class="brush: css">

.dsq-popup[id] {
	position: absolute !important;
}

.dsq-popup-container .dsq-popup-close {
	right: 5px;
	top: 5px;
	position: absolute !important;
	z-index: 1200 !important;
}

.dsq-popup-container .dsq-popup-title {
	position: relative !important;
}

.dsq-popup-container .dsq-popup-title h3 {
	font-size: 12px !important;
}

.dsq-popup .dsq-tabbed-modal {
	background: none !important;
}

#dsq-popup-message #dsq-login-disqus iframe {
	height: 300px !important;
}

.dsq-popup-body {
	width: auto !important;
}

.dsq-login-box .dsq-popup-body {
	width: 300px !important;
}

.dsq-popup .dsq-modal-tabs {
	width: auto !important;
	float: none !important;
}

#dsq-popup-message.dsq-popup .dsq-modal-tabs li {
	float: left !important;
	width: 43px !important;
}

#dsq-popup-message.dsq-popup .dsq-modal-tabs li a {
	padding: 4px 6px !important;
	text-align: center !important;
	font-size: 0px !important;
	border-bottom: none !important;
}

.dsq-popup .dsq-tab-container {
	padding: 10px !important;
	font-size: 12px !important;
}

#dsq-popup-message.dsq-popup .dsq-modal-tabs li.dsq-active a {
	border-bottom: none !important;
	-webkit-box-shadow: none !important;
	-moz-box-shadow: none !important;
	box-shadow: none !important;
	background: #eee !important;
}

#dsq-popup-message.dsq-popup .dsq-modal-tabs li.dsq-active a:hover {
	border-bottom: none !important;
}
</pre>
<h3><span>適用方法</span></h3>
<p>適用したいアカウントのアピアランスパネルを開きます。</p>
<div class="component img"><a href="http://inspire-tech.jp/wp-content/uploads/2012/11/disqus_2.png"><img src="http://inspire-tech.jp/wp-content/uploads/2012/11/disqus_2-570x171.png" alt="" title="disqus_2" width="570" height="171" class="alignleft size-large wp-image-1435" /></a>
</div>
<p>スクロールして中ほどより下にある、Custom CSSの欄に上記コードを記述して保存します。</p>
<div class="component img"><a href="http://inspire-tech.jp/wp-content/uploads/2012/11/disqus_3.png"><img src="http://inspire-tech.jp/wp-content/uploads/2012/11/disqus_3-570x189.png" alt="" title="disqus_3" width="570" height="189" class="alignleft size-large wp-image-1436" /></a></div>
<h3><span>JavaScriptの設置</span></h3>
<p>上記CSSだけではポップアップウィンドウの位置がおかしくなるため、下記JavaScriptを設置してください。</p>
<pre class="brush: js">
jQuery(function($) {
	setInterval(function() {
		$('#dsq-popup-message').css({
			'position': 'absolute',
			'top': $(window).scrollTop() + 10
		});
	}, 1000);
});
</pre>
<h3><span>スマートフォンでの表示</span></h3>
<p>こんな感じで表示されます。</p>
<div class="component img"><a href="http://inspire-tech.jp/wp-content/uploads/2012/11/disqus_4.jpg"><img src="http://inspire-tech.jp/wp-content/uploads/2012/11/disqus_4-300x533.jpg" alt="" title="disqus_4" width="300" height="533" class="alignleft size-medium wp-image-1451" /></a></div>
<h3><span>注意</span></h3>
<p><strong>カスタムCSSはPC版にももれなく適用されてしまう</strong>ため、PCとスマートフォンで利用する場合には、上記CSSにスマートフォンのみのクラス名やIDなどを追加するなどして、環境によって表示を切り替えられるよう工夫が必要です。</p>
]]></content:encoded>
			<wfw:commentRss>http://inspire-tech.jp/2012/11/disqus_for_smartphone/feed/</wfw:commentRss>
		<slash:comments>27</slash:comments>
		</item>
		<item>
		<title>Twitterからのトラックバックを簡単に設置できるjQueryプラグインをさらに改造してページネーションにも対応してみた</title>
		<link>http://inspire-tech.jp/2011/08/jquery_customized_twitter_trackback_plugin/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=jquery_customized_twitter_trackback_plugin</link>
		<comments>http://inspire-tech.jp/2011/08/jquery_customized_twitter_trackback_plugin/#comments</comments>
		<pubDate>Tue, 02 Aug 2011 01:10:23 +0000</pubDate>
		<dc:creator><![CDATA[家富 正幸]]></dc:creator>
				<category><![CDATA[その他]]></category>
		<category><![CDATA[開発]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[Plugin]]></category>
		<category><![CDATA[Twitter]]></category>

		<guid isPermaLink="false">http://inspire-tech.jp/?p=1148</guid>
		<description><![CDATA[以前に作成した、特定のURLへのTwitterの投稿を一覧で取得できるjQueryプラグインを、さらに改造してみました。 前回のプラグインではツイートが多くなっても、100件までは全て取得して表示するような仕組みになって [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>以前に作成した、<a href="http://inspire-tech.jp/2011/06/twitter_trackbac/" title="Twitterからのトラックバックを簡単に設置できるjQueryプラグインを改造してみた">特定のURLへのTwitterの投稿を一覧で取得できるjQueryプラグイン</a>を、さらに改造してみました。</p>
<p>前回のプラグインではツイートが多くなっても、100件までは全て取得して表示するような仕組みになっていたため、そのまま表示してしまうとページが縦に異常に長くなる現象が発生していました。</p>
<p>そこで、今回の改造で<strong>1ページに表示する件数を指定可能にし、さらにページネーションの仕組みを取り付けてみました</strong>。</p>
<div class="component img"><img src="http://inspire-tech.jp/wp-content/uploads/2011/08/twitter-trackback-list.png" alt="" title="twitter-trackback-list" width="449" height="586" class="alignnone size-full wp-image-1164" /></div>
<p><span id="more-1148"></span></p>
<h3><span>ソースコード</span></h3>
<p><script src="https://gist.github.com/1119248.js?file=jquery.twitterTrackback.custom.js"></script></p>
<h3><span>利用方法</span></h3>
<p>ツイートの一覧を表示したいDOMオブジェクトを用意し、下記のように利用します。</p>
<pre class="brush: js">$('#tweets').twitterTrackback();</pre>
<h3><span>オプション</span></h3>
<p>下記のように、<code>twitterTrackback</code>メソッドにオブジェクトを渡すことで、動作オプションを指定できます。</p>
<pre class="brush: js">$('#tweets').twitterTrackback({ exclude: [ 'jyokyoku' ], renderCallback: renderTweets });</pre>
<h4>オプションの一覧</h4>
<dl>
<dt>url (string)</dt>
<dd>ツイートを取得したいURLを指定します。デフォルトでは、スクリプトを設置したURLが利用されます。</dd>
<dt>wrapperTag (string)</dt>
<dd>ツイートの一覧を囲むタグを指定します。デフォルトでは<code>ul</code>です。</dd>
<dt>removeHash (boolean)</dt>
<dd>ツイートを取得するurlにハッシュが含まれる場合に、それを削除するかを指定します。デフォルトでは<code>true</code>です。</dd>
<dt>renderCallback (function)</dt>
<dd>ツイートをレンダリングする関数を指定します。</dd>
<dt>pagerCallback (function)</dt>
<dd>ページャをレンダリングする関数を指定します。</dd>
<dt>pagerPos (string)</dt>
<dd>ページャを表示する位置を指定します。</p>
<ul>
<li><code>both</code> &#8211; ツイート一覧の上下</li>
<li><code>top</code> &#8211; ツイート一覧の上</li>
<li><code>bottom</code> &#8211; ツイート一覧の下</li>
</ul>
</dd>
<dt>perpage (integer)</dt>
<dd>1ページに表示するツイートの数を指定します。デフォルトでは<code>10</code>です。</dd>
<dt>noTrackback (string)</dt>
<dd>ツイートが1件も無い場合に表示するメッセージを指定します。デフォルトでは<code>&lt;p&gt;Twitterからのトラックバックはありません。&lt;/p&gt;</code>が表示されます。</dd>
<dt>exclude (array)</dt>
<dd>ツイートを表示したくないユーザーIDを配列で指定します。</dd>
</dl>
<h3><span>生成されるHTMLコード</span></h3>
<p>renderCallbackオプションやpagerCallbackオプションに何も指定しない場合、下記のようなHTMLコードが生成されます。</p>
<p>適宜CSSを利用してスタイリングしてください。</p>
<h4>ツイート一覧</h4>
<pre class="brush: xml">
&lt;ul&gt;
	&lt;li class=&quot;tweet1&quot;&gt;
		&lt;a href=&quot;http://twitter.com/jyokyoku&quot;&gt;&lt;img src=&quot;http://a1.twimg.com/profile_images/1302945019/___normal.jpg&quot; alt=&quot;家富正幸&quot; width=&quot;48&quot; /&gt;&lt;/a&gt;
		&lt;ul class=&quot;section&quot;&gt;
			&lt;li class=&quot;nick&quot;&gt;&lt;a href=&quot;http://twitter.com/jyokyoku&quot;&gt;家富正幸&lt;/a&gt;&lt;/li&gt;
			&lt;li class=&quot;content&quot;&gt;ツイートの内容が表示されます。&lt;/li&gt;
			&lt;li class=&quot;date&quot;&gt;&lt;a href=&quot;http://twitter.com/jyokyoku/status/xxxxxxxxxx&quot;&gt;1 days ago&lt;/a&gt;&lt;/li&gt;
		&lt;/ul&gt;
	&lt;/li&gt;
	&lt;li class=&quot;tweet2&quot;&gt;
		&lt;a href=&quot;http://twitter.com/jyokyoku&quot;&gt;&lt;img src=&quot;http://a1.twimg.com/profile_images/1302945019/___normal.jpg&quot; alt=&quot;家富正幸&quot; width=&quot;48&quot; /&gt;&lt;/a&gt;
		&lt;ul class=&quot;section&quot;&gt;
			&lt;li class=&quot;nick&quot;&gt;&lt;a href=&quot;http://twitter.com/jyokyoku&quot;&gt;家富正幸&lt;/a&gt;&lt;/li&gt;
			&lt;li class=&quot;content&quot;&gt;ツイートの内容が表示されます。&lt;/li&gt;
			&lt;li class=&quot;date&quot;&gt;&lt;a href=&quot;http://twitter.com/jyokyoku/status/xxxxxxxxxx&quot;&gt;1 days ago&lt;/a&gt;&lt;/li&gt;
		&lt;/ul&gt;
	&lt;/li&gt;
&lt;/ul&gt;
</pre>
<h4>ページャ</h4>
<pre class="brush: xml">
&lt;div class=&quot;tweetPager&quot;&gt;
	&lt;span class=&quot;current&quot;&gt;1&lt;/span&gt;
	&lt;span&gt;&lt;a href=&quot;javascript:void();&quot; onclick=&quot;jQuery.twitterTrackback.update(2); return false;&quot;&gt;2&lt;/a&gt;&lt;/span&gt;
&lt;/div&gt;
</pre>
<h3><span>コールバック関数を利用する</span></h3>
<p><code>renderCallback</code>オプションや<code>pagerCallback</code>オプションに適切な関数を渡すことで、表示されるツイートの内容やページャのコードを変更する事ができます。</p>
<h4>renderCallbackオプションを指定する</h4>
<p><code>renderCallback</code>オプションを指定する場合、引数を1つ取る関数を指定してください。<br />
引数にはツイートの番号が数値で渡されます。</p>
<p>また、関数の<code>this</code>スコープはツイートの情報が格納されたオブジェクトになるため、<code>this.author.name</code>などでツイートに関する情報を表示することができます。</p>
<p>デフォルトで実行される関数を載せておきます。</p>
<pre class="brush: js">
function renderHtml(n) {
	return (
		'&lt;li class=&quot;tweet' + n + '&quot;&gt;' +
			'&lt;a href=&quot;' + this.author.url + '&quot;&gt;&lt;img src=&quot;' + this.author.photo_url + '&quot; alt=&quot;' + this.author.name + '&quot; width=&quot;48&quot; /&gt;&lt;/a&gt;' +
			'&lt;ul class=&quot;section&quot;&gt;' +
				'&lt;li class=&quot;nick&quot;&gt;&lt;a href=&quot;' + this.author.url + '&quot;&gt;' + this.author.nick + '&lt;/a&gt;&lt;/li&gt;' +
				'&lt;li class=&quot;content&quot;&gt;' + this.content.replace(/((http:|https:)\/\/[\x21-\x7e]+)/gi, &quot;&lt;a href='$1'&gt;$1&lt;/a&gt;&quot;) + '&lt;/li&gt;' +
				'&lt;li class=&quot;date&quot;&gt;&lt;a href=&quot;' + this.permalink_url + '&quot;&gt;' + this.date_alpha + '&lt;/a&gt;&lt;/li&gt;' +
			'&lt;/ul&gt;' +
		'&lt;/li&gt;'
	);
}
</pre>
<h4>pagerCallbackオプションを指定する</h4>
<p><code>pagerCallback</code>オプションを指定する場合、引数を3つ取る関数を指定してください。<br />
引数は下記の値が渡されます。</p>
<ol>
<li>(integer) 現在のページ番号</li>
<li>(integer) 1ページにいくつツイートを表示するか</li>
<li>(integer) 現在のURLに対する全ツイート数</li>
</ol>
<p>また、ページャで生成されたリンクがクリックされた場合には、必ず下記の関数を実行して、ツイート一覧を書き換えるようにしてください。</p>
<pre class="brush: js">jQuery.twitterTrackback.update(pageNumber)</pre>
<p>デフォルトで実行される関数を載せておきます。</p>
<pre class="brush: js">
function pagerHtml(current, perpage, total) {
	var totalPages = total / perpage;
	var links = '';

	for (var i = 1; i &lt; totalPages; i++) {
		if (current != i) {
			links += '&lt;span&gt;&lt;a href=&quot;javascript:void();&quot; onclick=&quot;jQuery.twitterTrackback.update(' + i + '); return false;&quot;&gt;' + i + '&lt;/a&gt;&lt;/span&gt;';

		} else {
			links += '&lt;span class=&quot;current&quot;&gt;' + i + '&lt;/span&gt;'
		}
	}

	return (
		'&lt;div class=&quot;tweetPager&quot;&gt;' + links + '&lt;/div&gt;'
	);
}
</pre>
<h3><span>バグやご要望など</span></h3>
<p>バグやご要望などありましたら、<a href="http://twitter.com/jyokyoku" title="ツイッター">ツイッター</a>かコメントフォーム、<a href="http://www.facebook.com/pages/INSPIRE-TECH/217383898302804" title="INSPIRE TECH">Facebook</a>、または<a href="http://inspire-tech.jp/contact/" title="お問い合わせ">お問い合わせフォーム</a>からご連絡ください。</p>
]]></content:encoded>
			<wfw:commentRss>http://inspire-tech.jp/2011/08/jquery_customized_twitter_trackback_plugin/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>GoogleAnalyticsのログに?fb_xd_fragment=という大量のアクセスが発生する問題の解決方法</title>
		<link>http://inspire-tech.jp/2011/06/facebook_like_button_bug/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=facebook_like_button_bug</link>
		<comments>http://inspire-tech.jp/2011/06/facebook_like_button_bug/#comments</comments>
		<pubDate>Tue, 21 Jun 2011 20:36:14 +0000</pubDate>
		<dc:creator><![CDATA[家富 正幸]]></dc:creator>
				<category><![CDATA[その他]]></category>
		<category><![CDATA[問題解決]]></category>
		<category><![CDATA[Facebook]]></category>
		<category><![CDATA[GoogleAnalytics]]></category>
		<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://inspire-tech.jp/?p=455</guid>
		<description><![CDATA[Facebookのいいねボタンを設置して数日たったのですが、GoogleAnalyticsのアクセスログに異常な数の ?fb_xd_fragment=というクエリのついたアクセスが発生したため、その原因と解決策を調査した [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Facebookのいいねボタンを設置して数日たったのですが、GoogleAnalyticsのアクセスログに異常な数の <code>?fb_xd_fragment=</code>というクエリのついたアクセスが発生したため、その原因と解決策を調査したのでメモしておきます。</p>
<h3><span>IE7以下 + Facebookいいねボタンのバグ</span></h3>
<p>どうやらこれは、<strong>IE7以下でFacebookのいいねボタンが設置してあるページを閲覧した場合のバグ</strong>のようで、IE8以上や他のモダンブラウザで閲覧した場合には、このアクセスログは残りません。</p>
<h3><span>解決方法</span></h3>
<p>根本的な解決方法はFacebook側のスクリプトを修正してもらう他なさそうですが、今更IE6や7のために修正されるとも思えません。</p>
<p>とりあえず実害としてはログが汚れるということだけなので、GoogleAnalyticsのフィルタ機能を使って、当該クエリをカウントしないように設定すれば問題なさそうです。</p>
<p>Analyticsでの設定方法は下記サイトが非常に詳しいので参考のこと。</p>
<ul>
<li><a href="http://seoblog.seosearch.biz/?eid=45">いいね！ボタンを設置するとアクセス解析に支障が出る件 | SEO対策 e-search 公式ブログ</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://inspire-tech.jp/2011/06/facebook_like_button_bug/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>InternetExplorerのJavaScriptにはArray.indexOfが存在しない</title>
		<link>http://inspire-tech.jp/2011/06/internetexplorer_indexof/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=internetexplorer_indexof</link>
		<comments>http://inspire-tech.jp/2011/06/internetexplorer_indexof/#comments</comments>
		<pubDate>Sat, 18 Jun 2011 15:36:23 +0000</pubDate>
		<dc:creator><![CDATA[家富 正幸]]></dc:creator>
				<category><![CDATA[その他]]></category>
		<category><![CDATA[問題解決]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[ブラウザ]]></category>

		<guid isPermaLink="false">http://inspire-tech.jp/?p=352</guid>
		<description><![CDATA[JavaScriptの動作確認をしていて気づいたのですが、InternetExplorerのJavaScriptには、配列オブジェクトの indexOf メソッドが実装されていません。 すくなくともInternetExp [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>JavaScriptの動作確認をしていて気づいたのですが、InternetExplorerのJavaScriptには、配列オブジェクトの <code>indexOf</code> メソッドが実装されていません。</p>
<p>すくなくともInternetExplorer8以下には存在していませんでした。<br />
とりあえずForループで検索する方法で代替としたのですが、これは不便きわまりない・・・。</p>
<h3><span>解決策</span></h3>
<p>Forループで対応するか、下記サイトのようにArrayオブジェクトのprototypeを拡張する方法もあるようです。</p>
<ul>
<li><a href="http://yuki.xenophy.com/?p=35">あさのののーと &raquo; IEに配列のindexOfがない！</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://inspire-tech.jp/2011/06/internetexplorer_indexof/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Twitterからのトラックバックを簡単に設置できるjQueryプラグインを改造してみた</title>
		<link>http://inspire-tech.jp/2011/06/twitter_trackbac/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=twitter_trackbac</link>
		<comments>http://inspire-tech.jp/2011/06/twitter_trackbac/#comments</comments>
		<pubDate>Sat, 18 Jun 2011 15:21:12 +0000</pubDate>
		<dc:creator><![CDATA[家富 正幸]]></dc:creator>
				<category><![CDATA[その他]]></category>
		<category><![CDATA[開発]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[Plugin]]></category>
		<category><![CDATA[Twitter]]></category>

		<guid isPermaLink="false">http://inspire-tech.jp/?p=342</guid>
		<description><![CDATA[本プラグインにさらに手を加えたものを公開しています。Twitterからのトラックバックを簡単に設置できるjQueryプラグインをさらに改造してページネーションにも対応してみた（2011.08.02） 「@soraiyのj [&#8230;]]]></description>
				<content:encoded><![CDATA[<p><ins>本プラグインにさらに手を加えたものを公開しています。<a href="http://inspire-tech.jp/2011/08/jquery_customized_twitter_trackback_plugin/" title="Twitterからのトラックバックを簡単に設置できるjQueryプラグインをさらに改造してページネーションにも対応してみた">Twitterからのトラックバックを簡単に設置できるjQueryプラグインをさらに改造してページネーションにも対応してみた</a>（2011.08.02）</ins></p>
<p>「<a href="http://2inc.org/blog/blog/692/">@soraiyのjquery.twitterTrackback.jsを改良してみた。</a>」で公開されているTwitterからのツイートを表示するjQueryプラグインに、さらに手を加えたものを作ったので、ここにおいておきます。</p>
<h3><span>URLを自動取得に</span></h3>
<p>元のスクリプトでは実行時にURLを指定しなくてはいけませんでしたが、これを <code>location.half</code> の値を使って自動取得に変更しました。</p>
<p>下記のように、オプションさえ指定しなければ引数無しで記述可能です。</p>
<pre class="brush: js">
$('#twitterTrackback').twitterTrackbackList();
</pre>
<p><code>removeHash</code> オプションを指定することで、URLに含まれるハッシュを削除することができます。これは、ページ内リンクなどでURLにハッシュが含まれる場合、正しくツイートが取得できない問題を回避するためです。</p>
<pre class="brush: js">
$('#twitterTrackback').twitterTrackbackList({
    removeHash: true // デフォルトでtrue
});
</pre>
<h3><span>レンダリング用のコールバック関数を指定できる</span></h3>
<p><code>callback</code> オプションにコールバック関数を指定することで、自由にHTMLを生成できるようにしました。<br />
このサイトでは下記のような関数を使ってレンダリングしています。</p>
<pre class="brush: js">
$('#twitterTrackback').twitterTrackbackList({ callback: renderTweets });

function renderTweets(n) {
	return (
		'&lt;li class=&quot;tweet' + n + '&quot;&gt;&lt;dl&gt;' +
		'&lt;dt&gt;&lt;a href=&quot;' + this.author.url + '&quot;&gt;' + this.author.nick + '&lt;/a&gt;&lt;/dt&gt;' +
		'&lt;dd class=&quot;date&quot;&gt;&lt;a href=&quot;' + this.permalink_url + '&quot;&gt;' + this.date_alpha + '&lt;/a&gt;&lt;/dd&gt;' +
		'&lt;dd class=&quot;image&quot;&gt;&lt;a href=&quot;' + this.author.url + '&quot;&gt;&lt;img src=&quot;' + this.author.photo_url + '&quot; alt=&quot;' + this.author.name + '&quot; width=&quot;48&quot; /&gt;&lt;/a&gt;&lt;/dd&gt;' +
		'&lt;dd class=&quot;content&quot;&gt;' + this.content.replace(/((http:|https:)\/\/[\x21-\x7e]+)/gi, &quot;&lt;a href='$1'&gt;$1&lt;/a&gt;&quot;) + '&lt;/dd&gt;' +
		'&lt;/dl&gt;&lt;/li&gt;'
	);
}
</pre>
<p>コールバック関数の <code>this</code> スコープにはツイートの情報が入っていますので、HTMLと組み合わせて自由にデザインが可能です。</p>
<h3><span>除外するユーザーを設定可能に</span></h3>
<p><code>exclude</code> オプションに除外したいユーザー名を配列で指定することで、そのユーザーからのツイートを非表示にします。<br />
自分のツイートを非表示にする場合なんかに利用できます。</p>
<pre class="brush: js">
$('#twitterTrackback').twitterTrackbackList({ exclude: [ 'jyokyoku' ] });
</pre>
<h3><span>ソースコード</span></h3>
<p><a href="http://inspire-tech.jp/wp-content/uploads/2011/06/jquery.twitterTrackback.custom.js">こちらのリンク</a>からダウンロードするか、下記ソースコードを保存して利用して下さい。</p>
<p>動作確認は下記環境で行っています。</p>
<ul>
<li>InternetExplorer7</li>
<li>Firefox4</li>
<li>Opera10</li>
</ul>
<pre class="brush: js">
(function($) {
	jQuery.fn.twitterTrackbackList = function(options){
		var topsyOtterapi = 'http://otter.topsy.com/trackbacks.js';
		var self = this;
		var tweetHtml = '';

		function renderHtml(n) {
			return (
				'&lt;li class=&quot;tweet' + n + '&quot;&gt;' +
					'&lt;a href=&quot;' + this.author.url + '&quot;&gt;&lt;img src=&quot;' + this.author.photo_url + '&quot; alt=&quot;' + this.author.name + '&quot; width=&quot;48&quot; /&gt;&lt;/a&gt;' +
					'&lt;ul class=&quot;section&quot;&gt;' +
						'&lt;li class=&quot;nick&quot;&gt;&lt;a href=&quot;' + this.author.url + '&quot;&gt;' + this.author.nick + '&lt;/a&gt;&lt;/li&gt;' +
						'&lt;li class=&quot;content&quot;&gt;' + this.content.replace(/((http:|https:)\/\/[\x21-\x7e]+)/gi, &quot;&lt;a href='$1'&gt;$1&lt;/a&gt;&quot;) + '&lt;/li&gt;' +
						'&lt;li class=&quot;date&quot;&gt;&lt;a href=&quot;' + this.permalink_url + '&quot;&gt;' + this.date_alpha + '&lt;/a&gt;&lt;/li&gt;' +
					'&lt;/ul&gt;' +
				'&lt;/li&gt;'
			);
		}

		options = $.extend({
			url: window.location.href,
			wrapperTag: 'ul',
			removeHash: true,
			callback: renderHtml,
			noTrackback: '&lt;p&gt;Twitterからのトラックバックはありません。&lt;/p&gt;',
			exclude: []
		}, options);

		if (options.removeHash) {
			options.url = options.url.replace(/#.+/, '');
		}

		jQuery.ajax({
			type: 'GET',
			url: topsyOtterapi,
			cache: false,
			dataType: 'jsonp',
			data: {
				perpage: '100',
				order: 'date',
				url: options.url
			},
			success: function(trackbackData) {
				if(trackbackData.response.list.length == 0) {
					tweetHtml += options.noTrackback;

				} else {
					jQuery.each(trackbackData.response.list, function(n) {
						for (var i = 0; i &lt; options.exclude.length; i++) {
							if (options.exclude[i] != this.author.nick) {
								tweetHtml += options.callback.call(this, n);
							}
						}
					});

					if (!tweetHtml) {
						tweetHtml = options.noTrackback;

					} else if (options.wrapperTag) {
						tweetHtml = '&lt;' + options.wrapperTag + '&gt;' + tweetHtml + '&lt;/' + options.wrapperTag + '&gt;';
					}
				}
				jQuery(self).append(tweetHtml);
			},
			complete: function() {}
		});
	};
})(jQuery);
</pre>
<p>不具合等があれば、コメントかツイッターで報告下さると有り難いです。</p>
]]></content:encoded>
			<wfw:commentRss>http://inspire-tech.jp/2011/06/twitter_trackbac/feed/</wfw:commentRss>
		<slash:comments>39</slash:comments>
		</item>
		<item>
		<title>HTMLのclass属性を利用して、要素の幅と高さを指定できるJavaScript</title>
		<link>http://inspire-tech.jp/2010/11/javascript_to_set_width_and_height_by_using_class_of_html/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=javascript_to_set_width_and_height_by_using_class_of_html</link>
		<comments>http://inspire-tech.jp/2010/11/javascript_to_set_width_and_height_by_using_class_of_html/#comments</comments>
		<pubDate>Sat, 27 Nov 2010 17:06:12 +0000</pubDate>
		<dc:creator><![CDATA[家富 正幸]]></dc:creator>
				<category><![CDATA[その他]]></category>
		<category><![CDATA[参考]]></category>
		<category><![CDATA[開発]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://inspire-tech.jp/?p=253</guid>
		<description><![CDATA[CSSで複雑な表組みなどをデザインしている際、幅や高さをピクセル単位で細かく指定したいことがありますよね？ ただ、HTMLのstyle要素は記述が汚くなるから使いたくない、でもCSSでわざわざclassを作っているとCS [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>CSSで複雑な表組みなどをデザインしている際、幅や高さをピクセル単位で細かく指定したいことがありますよね？</p>
<p>ただ、HTMLのstyle要素は記述が汚くなるから使いたくない、でもCSSでわざわざclassを作っているとCSSがごちゃごちゃしてしまう・・・。</p>
<p>そんな場合に、HTMLのclass要素を使って、簡単に幅と高さを指定できるJavaScriptを書いてみました。</p>
<h3><span>ダウンロード</span></h3>
<p><a href='http://inspire-tech.jp/wp-content/uploads/2010/11/wh.js'>wh.js</a><br />
※jQueryを利用しますので、別途jQuery 1.3.2以上のバージョンを<a href="http://jquery.com/">ダウンロード</a>してください。</p>
<h3><span>ソース</span></h3>
<pre class="brush: js">
(function($) {
    $(function() {
        $('[class*=w_], [class*=h_]').each(function() {
            var classes = $(this).attr('class').split(' ');

            for (var i in classes) {
                if (match = classes[i].match(/^([wh])_(\d+)(px|p)$/)) {
                    var key = '';
                    var value = '';

                    switch (match[1]) {
                        case 'w':
                            key = 'width';
                            break;
                        case 'h':
                            key = 'height';
                            break;
                    }

                    switch (match[3]) {
                        case 'p':
                            value = match[2] + '%';
                            break;
                        case 'px':
                            value = match[2] + 'px';
                            break;
                    }

                    $(this).removeClass(match[0]).css(key, value);
                }
            }
        })
    });
})(jQuery);
</pre>
<h3><span>設置</span></h3>
<p>jqueryを利用しますので、本ライブラリを読み込ませる前にjqueryの1.3.2以上を読み込ませてください。</p>
<pre class="brush: html">
<script type="text/javascript" src="/js/jquery-1.3.2.min.js"></script>
<script type="text/javascript" src="/js/wh.js"></script>
</pre>
<h3><span>利用方法</span></h3>
<p>class指定に下記のような記述をしてください。</p>
<pre class="brush: html">
<div class="w_100px h_200px"></div>
</pre>
<p>この場合、widthが100ピクセル、heightが200ピクセルの指定がされます。<br />
また、パーセントでの記述も対応しています。</p>
<pre class="brush: html">
<div class="w_100p h_33p"></div>
</pre>
<p>この場合、widthが100％、heightが33%の指定になります。<br />
他のclassとの共存も問題ありませんので、比較的自由なデザインが可能になるかと思います。</p>
]]></content:encoded>
			<wfw:commentRss>http://inspire-tech.jp/2010/11/javascript_to_set_width_and_height_by_using_class_of_html/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
	</channel>
</rss>
