pixiv_expand_thumbnailsを勝手に修正

[2011.06.19] この問題は既に修正されています。

Pixiv閲覧に非常に便利なGreasemonkeyスクリプトhttp://userscripts.org/scripts/show/82175は、pixiv閲覧時にサムネイルをオリジナルイラストに置き換えてくれます。漫画も自動で置き換えてくれるのでいちいち[クリックして漫画を読む]を押さなくて済みます。
しかし、最近漫画ベージの画像が展開されなくなっています。iPhoneアプリでも漫画が見えない症状が出ていたのでおそらくPixiv側の仕様変更でしょう。
本家はまだ更新されていないようなので、見よう見まねで修正してみました。スクリプトの内容はほとんど理解できていないのでバグるかもしれませんが、本家対応までの緊急措置として参考までに。

// ==UserScript==
// @name           pixiv_expand_thumbnails
// @version        1.2.1
// @namespace      http://d.hatena.ne.jp/phithon/
// @description    Expand thumbnails and links to the original illusts and pages on pixiv. / pixivのイラストページでサムネイルをオリジナルのイラストや各マンガページへ展開します。
// @include        http://www.pixiv.net/member_illust.php?mode=medium&illust_id=*
// ==/UserScript==
(function () {
    var container = document.getElementsByClassName('works_display')[0];
    var thumb = container.getElementsByTagName('img')[0];
    var linkNode = thumb.parentNode;
    var linkParams = linkNode.href.split('?')[1];
    if (!linkParams.indexOf('mode=big')) {
        thumb.src = linkNode.href = thumb.src.replace(/(\d+)_m(\.\w{3})(\?\d+)?/, '$1$2');
        thumb.style.maxWidth = '740px';
    } else if (!linkParams.indexOf('mode=manga')) {
        var request = new XMLHttpRequest();
        request.open('GET', location.href.replace('mode=medium', 'mode=manga'));
        request.onreadystatechange = function () {
            if (request.readyState != 4 || request.status != 200) {
                return;
            }
            var thumbSrc = thumb.src.split('?')[0];
            var pre = thumbSrc.slice(0, thumbSrc.lastIndexOf('_')) + '_big_p';
            var pst = '.' + thumbSrc.split('.').pop();
            var html = [], h = -1;
            html[++h] = '<a href="';
            html[++h] = linkNode.href;
            html[++h] = '" target="_blank">';
            html[++h] = thumb.title;
            html[++h] = '</a>';
            var txt = request.responseText;
            var PGTAG = '<div class="image-container placeholder">';
            var cnt = -1;
            var idx = txt.indexOf(PGTAG);
            while (idx != -1) {
                var url = [pre, pst].join(++cnt);
                html[++h] = '<br/><a href="';
                html[++h] = url;
                html[++h] = '"><img style="max-width:740px;margin:20px 0 0;" src="';
                html[++h] = url;
                html[++h] = '"/></a>';
                idx = txt.indexOf(PGTAG, idx + PGTAG.length);
            }
                var PGTAG = '<div class="image-container placeholder odd">';
                var url = [pre, pst].join(++cnt);
                html[++h] = '<br/><a href="';
                html[++h] = url;
                html[++h] = '"><img style="max-width:740px;margin:20px 0 0;" src="';
                html[++h] = url;
                html[++h] = '"/></a>';
            container.innerHTML = html.join('');
            var imgNodes = container.getElementsByTagName('img');
            for (var i = -1, img; img = imgNodes[++i]; ) {
                if (img.naturalWidth == '0' || (img.naturalWidth == undefined && img.clientWidth < 50)) {
                    img.src = img.parentNode.href = img.src.replace('_big_p', '_p');
                }
            }
        };
        request.send(null);
    }
})();

変更箇所は以下の三点です。

  • request.open(...) の 'mode=manga_tb' を 'mode=manga' に
  • var PGTAG = '<div class="tb_div">'; を var PGTAG = '<div class="image-container placeholder">'; に
  • var PGTAG = '<div class="image-container placeholder odd">';から始まる7行を追加