イントロダクション
Google のブログサービス「Blogger」では、現在表示している投稿の「次の投稿」「前の投稿」ナビゲータにはタイトルが付与されません。Blogger の「前の投稿」「次の投稿」ナビゲータ 標準ではページのタイトルが表示されない (デザインは CSS にて変更済み) |
そこで、「次の投稿」「前の投稿」のリンクの URL を用いて、それらのページのフィードからページタイトルを取得し、「次の投稿」「前の投稿」へページタイトルを付与する JavaScript を作成しました。
コード
<!-- set next prev page title start --> <script type='text/javascript'> //<![CDATA[ <!-- (function () { // --- Util --- // JavaScript動的挿入 function addScript(src) { var script = document.createElement('script'); script.setAttribute("type", "text/javascript"); script.setAttribute("src", src); header_setChild(script); } // <head>取得 function getHeader() { return document.getElementsByTagName("head")[0]; } // <head>に子要素を追加 function header_setChild(child) { var head = getHeader(); head.appendChild(child); } // --- Main --- // 前の投稿の要素が存在したら、タイトル設定 var prev_page_link_obj = document.getElementById("Blog1_blog-pager-older-link"); if (prev_page_link_obj) { var prev_page_link_url = prev_page_link_obj.getAttribute("href"); addPageTitleFromFeed("blog-pager-older-link", prev_page_link_url, "addPrevPageTitle"); } // 次の投稿の要素が存在したら、タイトル設定 var next_page_link_obj = document.getElementById("Blog1_blog-pager-newer-link"); if (next_page_link_obj) { var next_page_link_url = next_page_link_obj.getAttribute("href"); addPageTitleFromFeed("blog-pager-newer-link", next_page_link_url, "addNextPageTitle"); } /* ページのタイトルをフィードから取得し、対象のオブジェクトへ追加する ins_obj_id : 対象のオブジェクトの id page_url : タイトルをフィードから取得するページの URL callback : フィードのデータを取得するためのコールバック */ function addPageTitleFromFeed(ins_obj_id, page_url, callback) { if (!ins_obj_id) return; if (!page_url) return; if (page_url.indexOf("?") != -1) return; // クエリ文字列が含まれているURLは対象外 // Feed の path に指定する URL を作成 var home_url = location.protocol + "//" + location.hostname + "/"; // ブログのホームの URL var page_url_remove_home = page_url.replace(home_url, ""); // ブログのホームの URLを除いた、タイトルをフィードから取得するページの URL if (!page_url_remove_home) return; // 対象とするページのURLが無い場合は対象外 page_url_remove_home = "/" + page_url_remove_home; // ページタイトルの挿入先を事前に生成 var div = document.createElement("div"); var title_obj_id = ins_obj_id + "-title"; div.innerHTML = "<a href=\"" + page_url + "\" id=\"" + title_obj_id + "\">" + "now loading..." + "</a>"; var obj = document.getElementById(ins_obj_id); if (!obj) return; obj.appendChild(div); // フィードを取得し、コールバック addScript(home_url + "feeds/posts/summary?alt=json-in-script&callback=" + callback + "&max-results=1&path=" + page_url_remove_home + "&redirect=false"); } })(); /* 前の投稿のページタイトルを設定する data : コールバックで渡される Feed のデータ */ function addPrevPageTitle(data) { addPageTitle(data, "blog-pager-older-link-title"); } /* 次の投稿のページタイトルを設定する data : コールバックで渡される Feed のデータ */ function addNextPageTitle(data) { addPageTitle(data, "blog-pager-newer-link-title"); } /* ページのタイトルを設定する data : コールバックで渡される Feed のデータ id : タイトルの設定先 */ function addPageTitle(data, id) { // ページのタイトルを取得 var title = ""; if (data.feed.entry) { if (data.feed.entry.length > 0) { title = escapeHTML(data.feed.entry[0].title.$t); } } // ページのタイトルを設定 var obj = document.getElementById(id); if (!obj) return; obj.innerHTML = title; // テキストをエスケープ処理する function escapeHTML(html) { var div = document.createElement("div"); if (div.innerText !== void 0) div.innerText = html; // innerText が定義されていれば innerText へ設定 else div.textContent = html; // Firefox のように innerText がないブラウザ向け return div.innerHTML; } } //--> //]]> </script> <!-- set next prev page title end -->
※なお、ブログの構造によっては、一部要素の id が異なる可能性があります。その場合には、各自のブログの構造に合わせて id を書き換えてください。
各コードの意味については以下の解説をご覧ください。
Blogger:「次の投稿・前の投稿」にページタイトルを付与する-Feedから情報取得-コード解説
http://upa-pc.blogspot.com/2014/12/blogger-prev-next-page-title-script-comment.html
設置方法
Blogger の設定のテンプレート→HTMLの編集にて、上記のコードを</body>の手前に設置します。Blogger の設定のテンプレート→HTMLの編集にて、 コードを</body>の手前に張り付けた状態 |
設置が完了したら、テンプレートをプレビューにて、ブログが正常に表示されることを確認したのち、テンプレートの保存を行います。
結果
以下のように、「前の投稿」「次の投稿」ナビゲータに、各リンク先ページのタイトルを表示することが出来るようになりました。Blogger の「前の投稿」「次の投稿」ナビゲータ JavaScript によってページタイトルを表示できるようになった |
動作確認環境
このプログラムが動作することを以下の環境で確認しました。- Chrome バージョン 39.0.2171.71 m
- Firefox バージョン 34.0
- Internet Explorer バージョン 9.0.8112.16421
まとめ
ブログ記事を投稿順に追っていく場合には、「前の投稿」「次の投稿」ナビゲータに、そのページのタイトルが表示されていると、次にどんなページが来るのかイメージしやすく、次のページへ移動する動機づけになると思います。使いやすい・見やすいブログのために、是非このコードを使ってみてください。
■ コードを改良して、Feedの遅延読み込み機能を追加しました。
遅延読み込み機能追加-Feedから情報取得-Blogger:「次の投稿・前の投稿」にページタイトルを付与するhttp://upa-pc.blogspot.com/2014/12/blogger-prev-next-page-title-script-delay.html
参考文献
Bloggerのページ送りをタイトルに変更する方法 | ダーフク.com
http://www.dafuku.com/2014/03/blogger-next-link-title-change.html
BloggerのフィードURL(RSS/Atom)についての貴重な情報が書かれているページまとめ - Dr.ウーパのコンピュータ備忘録
http://upa-pc.blogspot.jp/2014/11/blogger-feed-document-summary.html
galife: Blogger の フィード URL 構成 と パラメタ― まとめ
http://garafu.blogspot.jp/2013/07/blogger-url.html
Blogger:URLを指定して特定のページのフィード(Atom/RSS)を取得する方法 - Dr.ウーパのコンピュータ備忘録
http://upa-pc.blogspot.jp/2014/12/blogger-feed-from-path.html
http://www.dafuku.com/2014/03/blogger-next-link-title-change.html
BloggerのフィードURL(RSS/Atom)についての貴重な情報が書かれているページまとめ - Dr.ウーパのコンピュータ備忘録
http://upa-pc.blogspot.jp/2014/11/blogger-feed-document-summary.html
galife: Blogger の フィード URL 構成 と パラメタ― まとめ
http://garafu.blogspot.jp/2013/07/blogger-url.html
Blogger:URLを指定して特定のページのフィード(Atom/RSS)を取得する方法 - Dr.ウーパのコンピュータ備忘録
http://upa-pc.blogspot.jp/2014/12/blogger-feed-from-path.html
コメントを投稿
コメント投稿機能について