2014年12月30日火曜日

Blogger の「前の投稿」「次の投稿」を記事タイトルに変更する

この Blog もそうなのですが、Blogger で記事を閲覧すると、画面下のほうに「次の投稿」「ホーム」「前の投稿」というリンクが表示されます。


この「次の投稿」「前の投稿」を、記事のタイトル名に変えられたらいいなーと思ったのですが、実は JQuery を使えばちょいちょいと変更できることを知りました(テンプレートの編集は不要です)。

手順

Blogger の管理画面で「レイアウト」を開き、「ガジェットを追加」をクリックします(「ガジェットを追加」はどれを選んでも構いません)。


「HTML/JavaScript」を追加します。


「コンテンツ」に、以下の JavaScript をコピー&ペーストします。
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
<script type="text/javascript">
var olderLink = $("a.blog-pager-older-link").attr("href");
$("a.blog-pager-older-link").load(olderLink+" h3:first", function() {
var olderLinkTitle = $("a.blog-pager-older-link:first").text();
$("a.blog-pager-older-link").text(olderLinkTitle);
});
var newerLink = $("a.blog-pager-newer-link").attr("href");
$("a.blog-pager-newer-link").load(newerLink+" h3:first", function() {
var newerLinkTitle = $("a.blog-pager-newer-link:first").text();
$("a.blog-pager-newer-link").text(newerLinkTitle);
});
</script>
※このスクリプトは How to Replace Older Posts and Newer Posts Links with Blogger Post Titles より引用しています。


ちょいと改造

基本的にはこのスクリプトで何ら問題無く動作するのですが、記事名が長すぎる場合などに見映えが損なわれる場合があるので、次のように改造してみました。あと、async は単なる気休めです(笑)。

<script async='async' type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
<script async='async' type="text/javascript">
var olderLink = $("a.blog-pager-older-link").attr("href");
$("a.blog-pager-older-link").load(olderLink+" h3:first", function() {
var olderLinkTitle = $("a.blog-pager-older-link:first").text();
if( olderLinkTitle.length > 16 ) {
    olderLinkTitle = olderLinkTitle.substr(0, 16) + "...";
}
$("a.blog-pager-older-link").text(olderLinkTitle);
});
var newerLink = $("a.blog-pager-newer-link").attr("href");
$("a.blog-pager-newer-link").load(newerLink+" h3:first", function() {
var newerLinkTitle = $("a.blog-pager-newer-link:first").text();
if( newerLinkTitle.length > 16 ) {
    newerLinkTitle = newerLinkTitle.substr(0, 16) + "...";
}
$("a.blog-pager-newer-link").text(newerLinkTitle);
});
</script>



Blogger の小枝

2014年10月7日火曜日

Chrome でのブラウジングが遅くなる(フレッツ光ネクスト環境)

現象

Google Chrome を使用していて、Google 関連サイト(たとえば Google Map など)の閲覧が目に見えて遅くなる、という問題に遭遇しました。少々厄介なのが、Chrome を起動した直後はそれほど問題無く動作するのですが、少し時間が経過すると(30 分くらい?)、目に見えて動作が緩慢になるというところです。

ずーっと原因を探していたのですが、どうやら NTT がフレッツ光の利用者にレンタルしている PR-S300SE という「ひかり電話ルータ」の SPI (Stateful Packet Inspection)が誤作動しまくっているのが原因じゃないか、という推論に辿り着きました。

「PPPキープアライブを無効にすれば良い」という情報もありましたが、我が家の環境ではあまり効果はありませんでした。

確認方法

PR-S300SE の管理画面で [ 情報 ] → [ セキュリティログ ] で、廃棄[SPI] と記されたログが大量に出ていないか確認することで、現在の状態を確認することができます。我が家の場合は 1 分間に 20 パケットくらいが「廃棄[SPI]」と表示されていました。

解決策

根本的な解決策は「PR-S300SE 以外の機種に交換する」なのですが、レンタル品なのでそう簡単には交換に応じてもらえません。そこで諦めていたのですが、実はこの PR-S300SE、デフォルトで「PPPoE ブリッジ」が使用できるのだそうで。つまり、PR-S300SE の下にブロードバンドルータを置けば、ブロードバンドルータ側に PPPoE 接続と NAT を任せることができる、ということになります。

数年前に「フレッツ光ネクスト」に変えたときに、電話受付のお姉さんに「このルータはブリッジとして動作させられますか?」と聞いたのですが、その時には「多分できないはずです」と言われたような記憶が……。ま、いいか。

ブリッジモードで動作させる際の注意点

PR-S300SE をブリッジモードで動作させる際の注意点は次の通りです。あ、事前に BB ルータの手配も必要なので念のため。

  1. PR-S300SE には(ひかり電話と)BB ルータ以外は接続しない
  2. PR-S300SE の無線 LAN を無効にする
  3. DHCP サーバ機能を無効にする
  4. PR-S300SE が PPPoE 接続しないように設定する


4 については少々面倒なので、[ メンテナンス ] → [ 設定値の初期化 ] の [ 電話関連以外の設定初期化 ] をしてしまっても良いかもしれません。なお、設定が初期化されると PR-S300SE の IP アドレスが 192.168.1.1 に戻るので、その点もご注意ください。

事前に [ 設定値の保存&復元 ] で設定を保存しておくことをお薦めします。

これで、PR-S300SE の NAT(NAPT)は使用しなくなるので、あの鬱陶しい「廃棄[SPI]」ともおさらばできます!

本件について、Google Chrome 側での対処方法を加筆しました。
Chrome でのブラウジングが遅くなる(つづき)

Blogger の小枝

2014年8月23日土曜日

Blogger で Universal Analytics を使用する

Blogger には、標準で Google Analytics と連携する機能があります。ダッシュボードの「設定」→「その他」の中に「Google Analytics」という項目があって、アナリティクスのウェブ プロパティ ID を入力すれば、それだけで Analytics 用の JavaScript が include されるという便利なものです。



ただ、この設定だと Google Analytics が利用できるようになるだけで、Universal Analytics を利用することができません。そのため、Blogger で Universal Analytics を使用するためには、テンプレートに JavaScript を埋め込む必要があります。

テンプレートの <b:include data='blog' name='google-analytics'/> という行を探して、その直下に Google によって提供された Analytics 用の JavaScript スニペットを追加します。サンプルコードは次のようになっていますが……
<!-- Google Analytics -->
<script>
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
ga('create', 'UA-XXXX-Y', 'auto');
ga('send', 'pageview');
</script>
<!-- End Google Analytics -->
これを、次のように変更します(シングルクォートを実体参照に置き換えるのですが、もしかしたら自動的に修正されたかもしれません)。
<b:include data='blog' name='google-analytics'/>
<!-- Google Analytics -->
<script>
(function(i,s,o,g,r,a,m){i[&#39;GoogleAnalyticsObject&#39;]=r;i[r]=i[r]||function(){ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) })(window,document,&#39;script&#39;,&#39;//www.google-analytics.com/analytics.js&#39;,&#39;ga&#39;);
ga(&#39;create&#39;, &#39;UA-XXXX-Y&#39;, &#39;auto&#39;);
ga(&#39;send&#39;, &#39;pageview&#39;);
</script>
<!-- End Google Analytics -->
あと、せっかくなので、Analytics で拡張属性も拾えるようにコードを 1 行追加しておきましょう。
<b:include data='blog' name='google-analytics'/>
<!-- Google Analytics -->
<script>
(function(i,s,o,g,r,a,m){i[&#39;GoogleAnalyticsObject&#39;]=r;i[r]=i[r]||function(){ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) })(window,document,&#39;script&#39;,&#39;//www.google-analytics.com/analytics.js&#39;,&#39;ga&#39;);
ga(&#39;create&#39;, &#39;UA-XXXX-Y&#39;, &#39;auto&#39;);
ga(&#39;require&#39;, &#39;displayfeatures&#39;);
ga(&#39;send&#39;, &#39;pageview&#39;);
</script>
<!-- End Google Analytics -->
※ UA-XXXX-Y は Google Analytics のウェブ プロパティ ID に置き換えて下さい。

最後に、Blogger のダッシュボードでアナリティクスのウェブ プロパティ ID を設定している場合は、空白に戻しておきます。



Blogger の小枝

2014年8月18日月曜日

Blogger の <title> タグをカスタマイズする

Blogger のデフォルト設定では、<title> は「Blog 名: 記事の Subject」に設定されていますが(この記事だと「Blogger の小枝: Blogger で <title> タグをカスタマイズする」となります)、これだと検索した際に記事の Subject よりも Blog 名が前に表示されてしまうために、ちょっとどうかなー、と思うことがあります。

<title> を、たとえば「記事の Subject - Blog 名」に変更したい場合は、「テンプレート」から「HTML の編集」を選択して、現在のテンプレートのバックアップを取得後に、次のように変更して下さい。

変更前:
    <title><data:blog.pageTitle/></title>

変更後:
    <b:if cond='data:blog.pageName == &quot;&quot;'>
      <title><data:blog.pageTitle/></title>
    <b:else/>
      <title><data:blog.pageName/> - <data:blog.title/></title>
    </b:if>

<data:blog.pageName/> が、記事の Subject 相当の文字列に変換されます。ただ、トップページやアーカイブページなどを開いた場合は <data:blog.pageName/> に値がセットされないため、<title> が「- Blogger の小枝」という、ちと格好悪いものになってしまいます。そのため、<b:if cond='data:blog.pageName == &quot;&quot;'> で <data:blog.pageName/> が未定義の場合のみデフォルト設定に戻すようにしています。


Blogger の小枝

2014年8月9日土曜日

Blogger で「前の投稿」「次の投稿」の左右を入れ替える

Blogger を使っていて個人的に違和感をおぼえるのが、「前の投稿」(過去の投稿)へのリンクが右側に表示されて、「次の投稿」(新しい投稿)へのリンクが左側に表示される点です。これはどうしたものだろうなぁ~と思っていたのですが、カスタム CSS を追加することで左右を入れ替えることができます。

Blogger テンプレート デザイナーの「上級者向け」→「CSS を追加」を選択して、以下の 2 行を追加してください。

#blog-pager-older-link { float: left; }
#blog-pager-newer-link { float: right; }