どうもいつもお世話になっております。

また図々しい質問で申し訳ないのですが、ライブドアの件なのですが、長い記事を書くと、スマホ版では、たぶん6000文字程度のところで分割されてしまい、次のページにされてしまいます。
これを、自分でエディタからscriptを入れて、なんとか分割されないようにできないものかと悩んでいます。
これについて、Chromeでソースを調べると、スマホ版でも、記事内容は、全部読み込んでいるのに、表示はされておらず、エレメントとしても、入っていないです。
なので、scriptでページネーションをやっているんだろうと思って、調べたら、たぶんですが、http://parts.blog.livedoor.jp/js/jquery-1.7.1.min.js ←この中のどれかがそうだろうと思います。
スマホ版で読み込んでいるほかのscriptには、記事内容を分割するようなものが、見当たらないので、この中にあるのだろうと。
ですが…私には、どれがそうなのかがわからないのと、そのコードを無効化するような逆コードが書けないんです…。

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2016/12/22 23:35:18
id:Michiko_70554148

上のscriptへのlinkは、エディタよりも上で読んでいるので、エディタから書き込めば、そっちのほうが効くと思います。

急ぎませんので、もしも、お時間のあるときに、気が向いたときでけっこうですから、ご協力をいただけると、非常に助かります…。よろしくお願いいたします。

ベストアンサー

id:a-kuma3 No.1

回答回数4971ベストアンサー獲得回数2153

p.next とか a[rel="next"] な要素があったら、次のページを XHR とかで読み込んで無理やり貼り付けるとかでしょうか。

「続きを読む」があったら、次のページを読み込んで記事に追加するスクリプトです。

document.addEventListener("DOMContentLoaded", function() {
    var read_next = document.querySelector('a[rel="next"]');
    if (read_next) {
        var xhr = new XMLHttpRequest();
        xhr.onload = function(ev) {
            if (ev.target.status == 200) {
                var resp_doc = ev.target.response;

                // clone article
                var next_article = resp_doc.getElementById("article-contents");
                var article = document.getElementById("article-contents");
                if (next_article && article) {
                    var e = next_article.firstChild
                    do {
                        article.appendChild(e.cloneNode(true));
                        e = e.nextSibling;
                    } while (e);
                }

                // remove "read next"
                var area = read_next.parentNode.parentNode;
                area.parentNode.removeChild(area);
            }
        };
        var url = read_next.href;
        xhr.open('GET', url, true);
        xhr.responseType = 'document';
        xhr.send(null);
    }
});

自分で言うのもなんですが、無理やりな感じです。
2ページ目までしか見てませんし、コメントに書いたように広告やアクセスカウンタなど、元々のブログに持っているスクリプトがきちんと動かない可能性もあります。
また、トップページと潜水ドローンの記事のページをざっと見ただけなので、テンプレートに仕込むときは要注意です。


あと、ぽけっとしすてむさんからコメントがあった、これ。

ライブドアブログのスマートフォン版は、スクリプト設置に幾つかの制限があったように思います。

最近のブラウザなら大丈夫な範囲で書いたつもりですが、ブログのシステムとして何かしらの制限を入れていると動かないかもしれません。




追記です。

…ですが、ひとつ問題が、自力カスタムで、web拍手をスマホのほうにもつけるようにしていたんですが、本来は2ページ目の記事が終わった直後に表示をさせるようにしていたのですが、それは読み込まれていません。

拍手の対応をしてみました。先のスクリプトと入れ替えてみてください。

document.addEventListener("DOMContentLoaded", function() {
    var read_next = document.querySelector('a[rel="next"]');
    if (read_next) {
        var xhr = new XMLHttpRequest();
        xhr.onload = function(ev) {
            if (ev.target.status == 200) {
                var resp_doc = ev.target.response;

                var next_article = resp_doc.getElementById("article-contents");
                var article = document.getElementById("article-contents");
                if (next_article && article) {
                    var e = next_article.firstChild;
                    var clap_script;
                    do {
                        var clone = e.cloneNode(true);
                        if (clone.nodeType == 1) {
                            Array.prototype.forEach.call(clone.querySelectorAll("script"), function(script) {
                                if (/livedoorProfileClap/.test(script.innerHTML)) {
                                    clap_script = script;
                                }
                            });
                        }
                        article.appendChild(clone);
                        e = e.nextSibling;
                    } while (e);
                    if (clap_script) {
                        e = document.createElement("script");
                        e.onload = function() {
                            var write_ = document.write;
                            var htmls = [];
                            document.write = [].push.bind(htmls);
                            var script = new Function(clap_script.innerHTML);
                            script.call();
                            var e = document.createElement("span");
                            e.innerHTML = htmls.join("");
                            clap_script.parentNode.insertBefore(e, clap_script.nextSibling);
                            document.write = write_;
                        };
                        e.src = "//portal.profile.livedoor.com/js/livedoor_profile_clap.js";
                        article.appendChild(e);
                    }
                }

                var area = read_next.parentNode.parentNode;
                area.parentNode.removeChild(area);
            }
        };
        var url = read_next.href;
        xhr.open('GET', url, true);
        xhr.responseType = 'document';
        xhr.send(null);
    }
});

スクリプトに、拍手用の外部スクリプトの URL を書いている辺り、なんともかっこ悪いですが、元々の拍手のスクリプトも記事中に URL を書いちゃってますから、良いですよね (^^;

# スクリプトの一部を書き換えました m(_ _)m

# またまたスクリプトの一部を書き換えました

他14件のコメントを見る
id:a-kuma3

ぼくも、いろいろと気付きがあって楽しかった :-)

ちなみに、3分割の記事ってどれです?

2016/12/23 00:28:24
id:Michiko_70554148

本当に、助かりました。
3分割の記事は、いくつかあったような気がしますが、例えばこれです。
http://cumbersome.ldblog.jp/archives/10150889.html
この記事の場合には、内容を削って2ページにおさめるというのも、なかなか難しいし、キリのいいところで別記事を立てるというわけにもいかないので、仕方がないなと。ですが、これだけの内容を読むのに、2回もページをめくらなければならないとなったら、めくってまで全部見て行くというスマホ閲覧者は、なかなか少ないというのが現状です。

2016/12/23 01:18:27

その他の回答0件)

id:a-kuma3 No.1

回答回数4971ベストアンサー獲得回数2153ここでベストアンサー

p.next とか a[rel="next"] な要素があったら、次のページを XHR とかで読み込んで無理やり貼り付けるとかでしょうか。

「続きを読む」があったら、次のページを読み込んで記事に追加するスクリプトです。

document.addEventListener("DOMContentLoaded", function() {
    var read_next = document.querySelector('a[rel="next"]');
    if (read_next) {
        var xhr = new XMLHttpRequest();
        xhr.onload = function(ev) {
            if (ev.target.status == 200) {
                var resp_doc = ev.target.response;

                // clone article
                var next_article = resp_doc.getElementById("article-contents");
                var article = document.getElementById("article-contents");
                if (next_article && article) {
                    var e = next_article.firstChild
                    do {
                        article.appendChild(e.cloneNode(true));
                        e = e.nextSibling;
                    } while (e);
                }

                // remove "read next"
                var area = read_next.parentNode.parentNode;
                area.parentNode.removeChild(area);
            }
        };
        var url = read_next.href;
        xhr.open('GET', url, true);
        xhr.responseType = 'document';
        xhr.send(null);
    }
});

自分で言うのもなんですが、無理やりな感じです。
2ページ目までしか見てませんし、コメントに書いたように広告やアクセスカウンタなど、元々のブログに持っているスクリプトがきちんと動かない可能性もあります。
また、トップページと潜水ドローンの記事のページをざっと見ただけなので、テンプレートに仕込むときは要注意です。


あと、ぽけっとしすてむさんからコメントがあった、これ。

ライブドアブログのスマートフォン版は、スクリプト設置に幾つかの制限があったように思います。

最近のブラウザなら大丈夫な範囲で書いたつもりですが、ブログのシステムとして何かしらの制限を入れていると動かないかもしれません。




追記です。

…ですが、ひとつ問題が、自力カスタムで、web拍手をスマホのほうにもつけるようにしていたんですが、本来は2ページ目の記事が終わった直後に表示をさせるようにしていたのですが、それは読み込まれていません。

拍手の対応をしてみました。先のスクリプトと入れ替えてみてください。

document.addEventListener("DOMContentLoaded", function() {
    var read_next = document.querySelector('a[rel="next"]');
    if (read_next) {
        var xhr = new XMLHttpRequest();
        xhr.onload = function(ev) {
            if (ev.target.status == 200) {
                var resp_doc = ev.target.response;

                var next_article = resp_doc.getElementById("article-contents");
                var article = document.getElementById("article-contents");
                if (next_article && article) {
                    var e = next_article.firstChild;
                    var clap_script;
                    do {
                        var clone = e.cloneNode(true);
                        if (clone.nodeType == 1) {
                            Array.prototype.forEach.call(clone.querySelectorAll("script"), function(script) {
                                if (/livedoorProfileClap/.test(script.innerHTML)) {
                                    clap_script = script;
                                }
                            });
                        }
                        article.appendChild(clone);
                        e = e.nextSibling;
                    } while (e);
                    if (clap_script) {
                        e = document.createElement("script");
                        e.onload = function() {
                            var write_ = document.write;
                            var htmls = [];
                            document.write = [].push.bind(htmls);
                            var script = new Function(clap_script.innerHTML);
                            script.call();
                            var e = document.createElement("span");
                            e.innerHTML = htmls.join("");
                            clap_script.parentNode.insertBefore(e, clap_script.nextSibling);
                            document.write = write_;
                        };
                        e.src = "//portal.profile.livedoor.com/js/livedoor_profile_clap.js";
                        article.appendChild(e);
                    }
                }

                var area = read_next.parentNode.parentNode;
                area.parentNode.removeChild(area);
            }
        };
        var url = read_next.href;
        xhr.open('GET', url, true);
        xhr.responseType = 'document';
        xhr.send(null);
    }
});

スクリプトに、拍手用の外部スクリプトの URL を書いている辺り、なんともかっこ悪いですが、元々の拍手のスクリプトも記事中に URL を書いちゃってますから、良いですよね (^^;

# スクリプトの一部を書き換えました m(_ _)m

# またまたスクリプトの一部を書き換えました

他14件のコメントを見る
id:a-kuma3

ぼくも、いろいろと気付きがあって楽しかった :-)

ちなみに、3分割の記事ってどれです?

2016/12/23 00:28:24
id:Michiko_70554148

本当に、助かりました。
3分割の記事は、いくつかあったような気がしますが、例えばこれです。
http://cumbersome.ldblog.jp/archives/10150889.html
この記事の場合には、内容を削って2ページにおさめるというのも、なかなか難しいし、キリのいいところで別記事を立てるというわけにもいかないので、仕方がないなと。ですが、これだけの内容を読むのに、2回もページをめくらなければならないとなったら、めくってまで全部見て行くというスマホ閲覧者は、なかなか少ないというのが現状です。

2016/12/23 01:18:27
  • id:a-kuma3
    そのライブドアのブログの URL って教えてもらうことは可能でしょうか。
    多分、サーバの方で次ページの処理(一定の文字数で切り詰め)をしているはずで、javascript ではどうにもならないと思うのですが、確認だけでもしてみようかなと。

    因みに、質問であげられてる jquery-1.7.1.min.js はライブラリなので、それ自体には文字を切り詰めたりということはやりません。
    ソースの内容は、Google でホストしているものと全く同じです。
    https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js
  • id:psne
    >スマホ版でも、記事内容は、全部読み込んでいるのに、表示はされておらず、エレメントとしても、入っていないです。
    記事を機械的に分割しているので、例えば、2ページに分割された後半の記事は、1ページ目に入っていません。
    (つまり、2ページ目を読むには、読み込みを行う必要がある という事になります。)

    最近確認した仕様ではないのでコメントとなりますが、ライブドアブログのスマートフォン版は、スクリプト設置に幾つかの制限があったように思います。
  • id:Michiko_70554148
    どうもお手数をおかけします。
    //cumbersome.ldblog.jp/ です。
    ソースで見ると、記事エディタから書き込んだ内容が、すべて載っているのです。
    なのに、要素を検証すると、途中までになっています。
    「続きを読む」が勝手につけられていて、その前後には、scriptはありません。
    なので、どうやっているのかなあと、たぶん、もっと上のほうで読み込んでいるscriptで、やっているんじゃないかと。
    記事エディタはかなり下のほうで読み込んでいて、その下には、ページ分割を命令しているぽいscriptはありません。
    ソースのほうで全部載っているなら、scriptでページネーションをしているのではと。

    ページ分割をすると、理屈から言えばPVが増えるわけですが、それでも、どうしてページ分割をしたくないかと言うと、
    ①記事内容を全部読まず、途中のページまでで帰ってしまうスマホ閲覧者が多い…スマホからの閲覧者で、ページをめくっていない人が多い。
    ②長い記事だからと思って、目次をつけても、意味がない。
    ③リストタグを使ったときに、リストタグの途中で分割されてしまうと、おかしなことになる。特に、olタグの場合には、順番がおかしくなってしまう。

    1記事あたり5万字までは書けるので、書くほうとしては、分割することで、多少のPVが増えるよりは、分割をしないで、スマホでは、そのまま見せたいわけなんです。
    ガラケーでも分割をされているようなんですが、そっちはもう、閲覧者全体の5%くらいですし、ガラケー自体が、いつまで続くかわからないサービスなので、そちらへの対応は、もうしなくていいと思っていますが、スマホは、そういうわけには行かないと。
    現段階で、スマホ閲覧のほうが多いので、記事内容を全部読まない人がそんなに多ければ、長い記事を書かないようにするしかないのですが、6000文字程度でおさめるということだと、それほどちゃんとした内容を書けないし、長い記事のほうが、検索で上位に出られそうなので、短い記事ばかりにするわけにもいきません。
  • id:Michiko_70554148
    申し忘れましたが、分割された記事のサンプルとしては、http://cumbersome.ldblog.jp/archives/10695230.html がそうです。ほかにもいっぱいありますが、最近のだとそれです。
  • id:psne
    >ソースで見ると、記事エディタから書き込んだ内容が、すべて載っているのです。
    ソースを確認した際に、PC版を閲覧していると考えられます。
    ソースを表示したタブの ユーザーエージェント を、スマートフォン用の物に変更して再読み込みして下さい。
    機械的に分割されている事が分かると思います。
  • id:Michiko_70554148
    そうでした、Chromeのスマホ画面から見ていたんですが、なぜか、ソースはPC版のが出ていました。
    そうすると、エディタの時点で分割されてしまって、もともと読み込んでいないから、自力で解除することは、無理だということなんでしょうか。
  • id:psne
    技術的には可能ですが、質問に含まれている想定の効果は無い、と提案します。
    #分割されないブログを利用した方が、現実的である、という意味です。
  • id:Michiko_70554148
    そうですか…読み込み自体はやっていて、ソース内のscriptで分割していると勘違いしてしまったので、エディタからscriptを書けば、自力で解除ができるのではないかと、期待してしまいました。
    お騒がせいたしました。
    分割されるということは、ライブドアのヘルプなど、公式の説明には、どこにも書いていなくて、私も、ずっと知らなかったんですが、Google Analyticsに、「p=2」とか、そういうものが出てくるので、これはなんだろうと思って、調べたら、勝手に分割がされていることを発見しました。ずいぶんえげつないことをすると思います。
    そういうことをしていると知っていれば、あの内容のブログをやるなら、あそこは選ばなかったかもしれないんですが、「1記事5万字までは書けますが、運営側で勝手に分割させてもらいます」などとは、どこにも書いていなかったので、利用してしまいました。
    お手数をおかけいたしました。
  • id:a-kuma3
    もう、答えは出てる、ってことで良いんでしょうか。

    Michiko_70554148>「1記事5万字までは書けますが、運営側で勝手に分割させてもらいます」などとは、どこにも書いていなかったので
    http://blog.livedoor.jp/staff/archives/51824712.html
    livedoor の仕様としては、↑でしょうか(日付がちょっと古い)。

    潜水ドローンのページは、ARTICLE タグの内側に 10525 文字あって分割の条件に合致しないんじゃないかな、という気がしなくもないですが。



    >|html|
    今回のケースでは、ともかく、ドローンは単に、海洋の状態を調べていただけであると、当局者は述べた。<br />
    </blockquote>

    あは<!-- google_ad_section_end(name=s2) --> </div>

    <div class="article-inner-pager">
    <p class="page-current">1/2</p><p class="next"><a href="http://cumbersome.ldblog.jp/archives/10695230.html?p=2" class="pagingNav" rel="next">続きを読む</a></p>
    </div>
    ||<
    こんな感じで記事自体が切れちゃってるので、「解除」という感じでは対応できないですね。




    ぽけっとしすてむ>技術的には可能ですが、

    とコメントされているのは、p.next とか a[rel="next"] な要素があったら、次のページを XHR とかで読み込んで無理やり貼り付けるとかでしょうか。
    アクセスカウンタとか広告とかの処理がきちんと働かなくなりそう。

  • id:Michiko_70554148
    どうもお手数をおかけします。
    そうですか、スタッフブログのほうに、こんなのがあったんですね。
    この件については、ヘルプのほうしか見ていませんでした。
    ここでは、タグ抜きで1万5千文字までは分割しないというふうになっていますが、現在適用されているものは、絶対に違います。
    たぶんその半分で、さらにタグ込みです。
    なので、ちょっと詳しい記事を書いた場合には、すぐに1ページにはおさまらなくなってしまうので、困っていました。
    直帰率というのは、ゼロにはできないので、めくらないで帰る人をゼロにすることは不可能なんですが、それにしても、めくらない人の率が高すぎるということが、Google Analyticsの統計からわかったので、なんとかしたいと思っていました。
    取りあえずは、めくるところを目立たせるようなタグを入れてあるんですが、あんまり改善したというふうな気もしません。
    もともとのページにあれば、そのまま続けて読んでくれる可能性があっても、ページをめくらないと出て来ないということだと、やっぱり、面倒だからそこまで読んでやめてしまうという人が、けっこういるぽいのと、そもそも、ブログ記事が強引に分割されているという認識がないから、気がつかないで、そこまでで終わりなんだと思ってしまう人も、いるはずだと思います。なので、分割は、ユーザー側にとっては、迷惑なことです。
    なにしろ、おふたかたのご意見では、自力解除はできなそうなので、諦めるしかないようです。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません