前の関連記事:Blogger:ページ番号付ページナビ(10)ボタンの折り返し表示をやめる
圧縮したJavaScriptを圧縮した前のコードに入れ替える
Blogger:ページ番号付ページナビ(10)ボタンの折り返し表示をやめるでJavaScriptをClosure Compilerで圧縮してHTML/JavaScriptガジェットに入れました。
Chromeのデバッガで整形してもこの圧縮コードは整形できなかったので、まず圧縮コードを圧縮していまいものに入れ替えました。
あまり長いコードだとガジェットの中に入りきらないのですが、今回は入りきり、動作もしました。
モバイルサイトのアイテムページでもページナビが表示されることへの対策
まず単に表示されるdiv要素の初期化をしていないところを修正しました。
PageNavi2_Blogger/PageNavi2_Blogger.js at 35b9229907f7f7a12c3ea9697190c16462fea45a · p--q/PageNavi2_Blogger
vars.elements.forEach(function(elem){
elem.textContent = null; // 要素を初期化。
dupNode = divNode.cloneNode(true); // ボタンノードを子ノードとするdivノードを複製する。デフォルトのプロパティしかコピーされない。イベントもコピーされない。
dupNode.onclick = onclickEvent; // 複製したノードにイベントのプロパティを追加する。
elem.appendChild(dupNode); // 既存のノードに追加して表示させる。
});
141行目を追加しましたが解決しませんでした。アイテムページではページナビが表示されないようにしないといけません。
idがblog-pagerというdivをテンプレートにもともとあったものを置換しているのでアイテムページではページナビに置換されているのです。
しかし、ウェブバージョンでは置換されていないのはどうしてだかわかりません。
これは根本的解決としてページナビを使わないページでは、ページナビモジュールをいれたガジェットを表示させないようにします。
レイアウト画面でガジェットのidを確認するとHTML8でした。
<b:widget id='HTML8' locked='false' mobile='yes' title='' type='HTML' visible='true'>
<b:includable id='main'>
<!-- only display title if it's non-empty -->
<b:if cond='data:title != ""'>
<h2 class='title'><data:title/></h2>
</b:if>
<div class='widget-content'>
<data:content/>
</div>
<b:include name='quickedit'/>
</b:includable>
</b:widget>
これをインデックスページのみに表示させるようにします。 <b:widget id='HTML8' locked='false' mobile='yes' title='' type='HTML' visible='true'>
<b:includable id='main'>
<!-- only display title if it's non-empty -->
<b:if cond='data:title != ""'>
<h2 class='title'><data:title/></h2>
</b:if>
<div class='widget-content'>
<b:if cond='data:blog.pageType == "index"'> <!-- インデックスページのみに表示させる -->
<data:content/>
</b:if>
</div>
<b:include name='quickedit'/>
</b:includable>
</b:widget>
これで解決しました。iOS Safariでウェブバージョンのラベルインデックスページをみるとページナビが表示されないことへの対策
これはURLからラベルが取得できていないのが原因でした。
モバイルデバイスからウェブバージョンのラベルインデックスページを見たときのURLはこのようになっていました。
https://p--q.blogspot.jp/search/label/Blogger%E3%82%AB%E3%82%B9%E3%82%BF%E3%83%9E%E3%82%A4%E3%82%BA?m=0?max-results=7
?が二つあるので正規表現でうまくラベルが取得できていません。
if (/\/search\/label\//i.test(thisUrl)) { // ラベルインデックスページの場合URLからラベル名を取得。
vars.postLabel = /\/search\/label\/(.+)(?=\?)/i.exec(thisUrl)[1]; // 後読みは未実装の可能性あるので使わない。
}
最初の?にだけ一致してほしいのですが、最短マッチを使っても思った通りの文字列は得られませんでした。 if (/\/search\/label\//i.test(thisUrl)) { // ラベルインデックスページの場合URLからラベル名を取得。
thisUrl = thisUrl.replace("m=0?",""); // モバイルデバイスからウェブバージョンを見た時の文字列を削除。
vars.postLabel = /\/search\/label\/(.+)(?=\?)/i.exec(thisUrl)[1]; // 後読みは未実装の可能性あるので使わない。
}
もう予めm=0?を削除して解決しました。これで問題が解決しました。
PageNavi2_Blogger/PageNavi2_Blogger.js at 5bcf0855e0bbe4afe71e7ceaaa5e50d9fdb77581 · p--q/PageNavi2_Blogger
再度圧縮したコードに入れ替えて修正完了です。
(2016.12.20追記。ボタンのページ番号はname属性にもたせていましたが、title属性に変更しました。
PageNavi2_Blogger/PageNavi2_Blogger.js at 90090ca3d750637787c5e6e2cfbcd6b3d9fd0c7b · p--q/PageNavi2_Blogger)
0 件のコメント:
コメントを投稿