はてなキーワード: autopagerizeとは
はてなブックマークの増田一覧の、さらに「すべて」(1 user)をチェックしている希有な人向けのユーザースクリプトを公開します。
https://b.hatena.ne.jp/site/anond.hatelabo.jp/?sort=eid
// ==UserScript== // @name Hatena Bookmark Anond Filter // @namespace https://b.hatena.ne.jp/site/anond.hatelabo.jp/ // @description はてなブックマークの『はてな匿名ダイアリー』の記事のうち、指定したNGワードが含まれる投稿を非表示にします。 // @match https://b.hatena.ne.jp/site/anond.hatelabo.jp/* // @grant none // @version 2.0.2026.01.21.0011 // ==/UserScript== (function(){ const SCRIPTID = 'HatenaBookmarkAnondFilter'; console.time(SCRIPTID); const CLASSNAME = 'filtered';/*フィルタ該当要素*/ const CHECKED = 'checked';/*二重チェック回避フラグ*/ const ONCE = 1, AP = 2, INTERVAL = 3;/*適用タイミング*/ const NGWORDS = {/* 合計100ポイントで非表示判定(ただし1つの記事内で同じワードが複数使われても1度しか加算しない) */ '100': [/*即NG確定ワード*/ 'dorawii', 'あおやまちゃん', 'ボスマン', 'MNK', '電気通信大学たいてい', 'なんぴょん', 'れめくん', 'リュックサック野郎', 'boushi_inst', 'hakaikami', 'Rekyu', 'iloveootaku_2',/*電気通信大学たいてい鉄道研究会れめくん(頻出)*/ /*A-G*/'a9w8ru6fqyxqfv9', 'admirail_togo', 'akibakko6348', 'alf1974al', 'amatukiseiru', 'anapgoeson', 'aoi_mizuho', 'asapgoeson', 'asupgoeson', 'b6jbpsji91ieigt', 'bmi22yo', 'boushi_ob', 'buscholarx', 'bw0531', 'circlecavok', 'disney1007cla', 'dora22sibuya', 'donkotrain', 'ecotosk', 'electlone', 'factomodachi', 'fft_dareka', 'gmhtcyznf_abc', 'goesonanap', 'gyudon_honmono', /*H-N*/'h13_yokohama', 'h2twi', 'H2TWR', 'hamaishogo1111', 'haru_mofumoffu', 'hermitv8', 'hirabiscus', 'hinolovelove', 'hnmk0127_03', 'inaken17_', 'inte235dy', 'ixtabes', 'jamcombatge', 'kawachiasukanew', 'kaoru_ai1991', 'keio9730F', 'kiha2228', 'koreanlabsfc', 'koyounoyooko', 'kqlex1500', 'kurakamasan', 'kurotamaxxx', 'kt_ruma_1372', 'lightningreen77', 'mamadoll_kun', 'matya_uec', 'minamihinawot', 'minori0151', 'monkichi_22', 'mugen_08i', 'mukoroku651', 'nakano6409', 'nanpyong', 'new_oer', 'nimouec', 'NoName_thUFO', 'norannnde', /*O-U*/'oreizmmiporin', 'orenotanoshimi', 'osaka_sirokichi', 'papepoco', 'pasotokon', 'pm95uq', 'reme_kun', 'ruin_2002', 's03_amurtk2731', 'sacchan03110319', 'seisu_bot', 'senanana_cos', 'shinano_115', 'shineleaf1372', 'shop_bullet', 'shurimpy', 'soroisoroi', 'sui_pm95uq', 'sweidan821858', 'taiyaki_level2', 'takao_straight5', 'taking0000', 'tarotaromusic1', 'tc201_501', 'tocarbarn', 'toshikimiyazaki', 'train_magician', 'tx9y2cpwdz27255', 'u2fap5u4zw57811', 'uec15take', 'uecrail', /*V-Z_0-9*/'vampire_mio', 'vbdmnwefknmxsdm', 'vp20th', 'wafue', 'wakasato_', 'walkingniwatori', 'wataameexpress', 'ya4975349616894', 'ymbk_arisa', 'yms_uec16', 'yuuya_1104_uec', '__________ob', '_chocorail_', '_doitforthewin_', '_toeshin', '_unigmo', '100mph_no_yuuki', '169_D51_protect', '2969364x', '2rtkvn34il2783', '36kyo', '86lilxw1', /*tadaup.jp*/'1dOaKWk3.jpeg', '1sL2VBZ5.jpeg', '1uNK2iEP.jpeg', 'CBUHadpD.jpeg', 'CgJlF4Wr.jpeg', 'CGTtm0Ev.jpeg', 'CIxj8clS.jpeg', 'CqbERPdQ.jpeg', 'CTZsA2wM.jpeg', 'CWY2m7rS.jpeg', 'CZVCEgd1.jpeg', 'テクウヨ', '自己放尿', ' ーーーーーーーー', 'https://anond.hatelabo.jp/20260107144223',/*AI問答貼り付け増田*/ '†噛み締めて行こうな†', '困難女性(コンジョ)', '困難女性(コンジョ)', ], '90': [/*ほぼNGだが確定ワードが必要*/ 'https://megalodon.jp/', ], '10': [/*ほぼNGの確定ワード*/ '電気通信大学', '電通大', '駿河台大学', '学生課', '教務課', '鉄道研究会', '鉄研', '通勤特快', '不正乗車', '性慾', '穢い', 'エッタ', 'キセル', 'uec', ], }; const sites = { 'prefix': [ ['selector', '(modifier)', '(css)', '(REPEAT)'], ], 'https://b.hatena.ne.jp/site/anond.hatelabo.jp/': [ ['section.entrylist-unit li.js-keyboard-selectable-item', li => {li.querySelector('li.entrylist-contents-category > a').textContent = li.dataset.matches}, `.${CLASSNAME}{display: none;}`, AP], ], }; const rules = sites[Object.keys(sites).find(prefix => location.href.startsWith(prefix))]; if(rules === undefined) return console.log(SCRIPTID, 'Not found any sites.'); const scores = Object.keys(NGWORDS).map(Number).reverse();/*数値インデックス順に取り出されたkeysを逆順にして100から並べ直す*/ const filter = function(selector, modifier){/*各要素に対してNGワード判定して、該当したら追加でmodifierも適用する*/ document.querySelectorAll(selector).forEach(e => { if(e.dataset[CHECKED]) return; e.dataset[CHECKED] = 'true'; const text = e.textContent.toLowerCase(); let total = 0, matches = []; for(const score of scores){ for(const word of NGWORDS[String(score)]){ if(text.includes(word.toLowerCase())){ total += score; matches.push(word); if(total >= 100){ e.classList.add(CLASSNAME); e.dataset.matches = matches.join(', '); if(modifier) modifier(e); return; } } } } }); }; /* ONCE(一括適用) */ rules.forEach(rule => { const [selector, modifier, css] = rule; console.log(SCRIPTID, 'ONCE:', selector); filter(selector, modifier); if(css){ const style = document.createElement('style'); style.dataset.script = SCRIPTID; style.type = 'text/css'; style.textContent = css; document.head.appendChild(style); } }); /* AP(AutoPagerize) */ rules.filter(rule => rule[3] === AP).forEach(rule => { const [selector, modifier] = rule; document.addEventListener('GM_AutoPagerizeNextPageLoaded', e => { console.log(SCRIPTID, 'AP:', selector); filter(selector, modifier); }); }); /* INTERVAL */ rules.filter(rule => rule[3] === INTERVAL).forEach(rule => { const [selector, modifier] = rule; setInterval(function(){ console.log(SCRIPTID, 'INTERVAL:', selector); filter(selector, modifier); }, 1000); }); console.timeEnd(SCRIPTID); })();
/* Hatena Bookmark Anond Filter */ .filtered{ display: block !important;/*上書き*/ opacity: .25 !important; } .filtered:hover{ opacity: .75 !important; } .filtered li.entrylist-contents-category{ background: red !important; font-weight: bold; }
検索用: はてなブックマーク はてブ はてな匿名ダイアリー 増田 スパム キーワード NGワード フィルター ミュート 非表示 削除 隠す ブロック ユーザースクリプト ユーザースタイル hatena bookmark anond spam keywords ngwords filter mute hide hidden display none block userscript JavaScript js css style
下記のような増田新着を訪れるたびに発動するぐりもん https://b.hatena.ne.jp/site/anond.hatelabo.jp/?sort=eid 発動のたびに下記(必要ならpage=2以降も)にGM_xmlhttpRequestして「dorawiiのブクマ」を全件把握する https://b.hatena.ne.jp/api/users/dorawii_bukuma/bookmarks?page=1 把握したブクマURLはlocalStorageなどに7日間分くらい保存しておく 増田新着一覧のうち「dorawiiのブクマ」に該当するものにhiddenクラスなどを割り当てる (AutoPagerize_DOMNodeInserted イベントのタイミングでも同様に判定する)
自分が思ってた「もしもユーザー側で対処するとしたら…」という内容はこんな感じかな?
増田新着の一覧ページを、いくらAutoPagerizeを使ったとしても、何日分もさかのぼることはないだろうから、「万超えるURLの更新」の必要はなくて、7日間分くらい保持しておけばいいかなと思う。
AutoPagerize〜っていうのはスマホで見た時の話だな。確かにそれはこっち側の盲点だった。
apiからのurlリストとのフィルタとの連携でリスト側の更新はページ送りするたびにするっていう挙動をイメージでしてるのかね。
そうするとその度に万超えるURLの更新っていうのは読み込み速度について明らかに人間が体感できるレベルで影響出そうだけどまあそれしかないよね?
気が向いたらまたCHATgptと格闘して作ってみようかな?(ApiのURL丸投げして要件提示しただけでも割と少ない修正で済むものができそうにも思える)
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA512 https://anond.hatelabo.jp/20250824213138# -----BEGIN PGP SIGNATURE----- iHUEARYKAB0WIQTEe8eLwpVRSViDKR5wMdsubs4+SAUCaKwbkgAKCRBwMdsubs4+ SPLRAP9Z4HYuDIupzZe1s2wFDTFDDwIQGOmieHcVtrXP6Mh0CAEAnsJVwCuBQifr DjbcK55gVnwB4OCLysEqPdO/kBgw/AE= =NPi/ -----END PGP SIGNATURE-----
Chrome系ブラウザには増田を快適に閲覧するための コンパクトな増田 という古い拡張機能があったが、Chromeの更新に対応し切れておらず、既にChromeには新規インストールできなくなってしまっている。Edgeにはまだインストール可能だが、いずれ対応しなくなる可能性が高い。
そこで、「増田のトップページで、言及エントリ(返信・トラバ)を一覧から除外することで、新規エントリだけを一覧できる」という機能に絞ってコンパクトな増田を再現、ついでにいくつかのおまけ機能を付与したスタイルシート(CSS)を今年の4月に公開していたのだが、今回改めて英文スパム対策を追加したので公開する。
これを導入するには Stylus という拡張が必要で、少し気軽さには欠けるが、増田以外にも活用できるので、この機会にぜひ導入してみてほしい。拡張をインストールしたあとは、下記のコードをコピペして新規スタイルとして導入する方法もあるが、スタイルシートを公開できる userstyles.world の増田CSSページ(※毎朝9:00直後はアクセスできない) から [Install] ボタンでインストールするほうが、自動更新にも対応するので便利かもしれない。
/* トップページで言及エントリを除外 */ /* via: 最近ファーストブクマカが静か https://anond.hatelabo.jp/20250326171302 */ h1/*はてな匿名ダイアリー*/ + #intro/*名前を隠して楽しく日記。*/ + #body div.section:has(h3 > a/*■*/ + a:not(.keyword, .edit)/*anond:YYYYMMDDhhmmss*/){ display: none; } /* うっかりクリックしがちなキーワードリンクを無効に */ a.keyword{ pointer-events: none; } /* 執筆時のテキストエリアを広く */ textarea#text-body{ min-height: 50vh !important; } /* 執筆時に特殊記号のヒント(疑似要素なので選択してコピペできないのがもどかしいけど) */ p.post-submit > span.explain::after{ margin-left: 1em; padding-left: 1em; content: "特殊記号: &[&] <[<] >[>]"; background: url(/images/common/outsite-wh.gif) 0 3px no-repeat; } /* スパム対策部分は下記URLの [Install] ボタンで事前確認できます(随時更新中) */ /* https://userstyles.world/style/23028/ */
なお、このCSSを適用すると、NGワードを含むこの増田自体も、増田トップページからは消えてしまう(この増田単体の個別ページなら閲覧できる)。
念のため、PC・スマホにCSSを適用する方法の解説にもリンクしておく。
PC: 【Stylus】ウェブサイトにCSSを適用できる拡張機能。自由にカスタマイズ! | ナポリタン寿司のPC日記
https://www.naporitansushi.com/stylus/
※ StylusはFirefox版もある https://addons.mozilla.org/ja/firefox/addon/styl-us/
iPhone: MaKeoverアプリでiPhone SafariのCSSをカスタマイズ!万博パビリオン予約結果一覧を見やすくする使い方
https://gintachan.com/makeover-app-css-change-safari-how-to/
Android: スマートフォン Android版FirefoxのCSSカスタマイズ Stylus の使い方・初期設定方法
(7/21追記) また、スパムが特に多い時は、1ページまるごとスパムということもあるので、PCなら uAutoPagerize (Chrome) や weAutoPagerize (Firefox) などの拡張を使うと、自動でページが継ぎ足されて快適に読み進められる。ただし、継ぎ足ししまくるとメモリ不足などでブラウザが重くなることがあるので、そうなったら page: 20 などのページ番号をクリックしてから続きを読もう。
また、スパム対策の簡易NGワードは、下記のスクリプトを使って抽出した「直近の増田の頻出キーワードリンク上位20件」から、誤判定しそうな line と user を除いた18件を用いた。10件だと生き残る英文スパムがあったので20件にしたが、それでもわずかに洩れはある。しかし日本語による真っ当な(?)増田の直近の誤判定はなかった。はてなキーワードのリンクだけを対象にしているので、URLにはこれらのキーワードが入っていても大丈夫だ。ただし、スパムのトレンドが変われば話は変わってくるかもしれないし、過去や未来の増田の誤判定は当然あるだろう。気になる人は前掲のCSSを行単位で編集してほしい。
// AutoPagerizeでまとまった数のページを読み込ませた後に実行するとよい。 (function(){ const keywords = []; // はてなキーワードの集計 document.querySelectorAll('a.keyword').forEach(a => { // 4文字未満は誤検出の可能性が高まるので除外 if(a.textContent.length < 4) return; let index = keywords.findIndex(k => k.keyword === a.textContent); if(index >= 0) keywords[index].count += 1; else keywords.push({keyword: a.textContent, count: 1}); }); keywords.sort((a, b) => a.count < b.count); // ランキング配列の出力 console.log(keywords); // CSS埋め込み用に上位キーワードのみをURIエンコードして出力 console.log(keywords.slice(0, 20).map(k => encodeURIComponent(k.keyword)).join('\n')); })();
anond:20250326171302 ←元はこの増田がきっかけでした。
anond:20250701194328 ←キーワード判定に踏み切る後押しとなりました。
「コンパクトな増田」がどんなものかググる程度の非ファーストブクマカだけど、ファーストブクマカには大変お世話になっています。ひとまずこんなユーザースタイルを当てれば、トラバは除外できます。
/* トップページで言及エントリを除外 */ h1/*はてな匿名ダイアリー*/ + #intro/*名前を隠して楽しく日記。*/ + #body div.section:has(h3 > a/*■*/ + a/*anond:YYYYMMDDhhmmss*/){ display: none; }
ユーザースタイルやAutoPagerizeを使ったことない場合は下記を参考にググるなりしてみてほしい。
https://chromewebstore.google.com/detail/stylus/clngdbkpkpeebahjckkjfobafhncgmne?hl=ja
uAutoPagerize - Chrome ウェブストア
https://chromewebstore.google.com/detail/uautopagerize/kdplapeciagkkjoignnkfpbfkebcfbpb?hl=ja
--
マルウェア問題が起きたのはStylishで、そのユーザー層を引き継いだのがStylus。
紹介したuAutoPagerizeは拡張の更新日付もレビューの日付も新しいし、私自身はFirefoxのweAutoPagerizeを使ってるけどデータベース更新日付は本日付なので、たぶん大丈夫。実際増田のトップページで快適動作してます。
コンパクトな増田が動かなくなったことと関係しているのだろうか。最近見ていなかったから放置しているけれど、あれ使う人は自分でパッケージ作り直すくらいはできそうな気もする。どちらにせよあれ無しで閲覧するのは不可能そうだ。
特定ワードで追っている人もいるが、 RSS ってまだあったっけ。
新着が完全に機能していないので、趣味の一部が欠落してしまった。非公開ブクマを新着に載せる理由が無い(スパムが湧いて不便以前に、秘匿性が高い情報だし組み合わせれば誰がブクマしているか特定できる)けれど、そんなに難しいことなのだろうか。難しいなら公開のみのカウントカラムを持つとか、いっそのこと users にカウントしないようにするとかさ。カウントされなくても別に誰も困らないよね。
大して伸びない単なる日記が読みたい。
(追記)
あざます。素でも見れるならファーストさんに頼らず探そうかなと思ったけれど、頼っているのは「望むものが見られる」ことよりも「望まないものを見ないで済む」からなのだなと思いました。いつもありがとう。素、つらい。
「新着」は完全に用語を間違えていて、スマホからだと「検索」で anond.hatelabo.jp を検索した時の結果が非公開ブクマのものばかりで見ることができない、機能していないという意味でした。
はてブの機能としての「新着」は 3 users 以上の新着タブに出るやつですな。それはもう見なくなって長いので意識から外れていた。
非公開しかないブクマは検索結果に出さないで欲しい。セルクマやスパムじゃなくても、非公開の元々の意味からしたら出て欲しくないだろうに。
スマホでしか見なくなるとやりようがなくなって頼り切りだったけれど、休日くらいは PC でカスタム CSS と AutoPagerize でがんばろうかな。 AutoPagerize って共同 DB がうまく機能しなくて死んでなかったっけ。 Stylus ってサプライチェーンでマルウェアになってなかったっけ。その辺りも調べてみるね。
個人的には PC で閲覧している時はスルー力が強く働くが、スマホだとそれが弱まる、見るものは見たいものであって欲しいという気持ちが強まる気がする。
まあ色々工夫の仕方はありそうだけれど、それはそれとしてはてブの検索は非公開のみを対象から外して欲しいな、という気持ちは変わらず。頼む
さてどうするか。今更変わりを探すのめんどい。
Auto Copy 反転しただけでコピーしてくれる。引用に便利だけど単純機能ほど代わりに何を選べばいいのか選びにくい
AutoPagerize オートページ。これは代わりのオススメ拡張機能で出てきたパワーアップ版で解決
Clearly 記事の文章だけ読みやすく抜き出して整えてくれる。Evernote亡き今、代わりは全く見つからないから終わりまで使い倒す
Easy Window Resize 最近入れたばかりなのにもう代わりを探さないといけないとは
Feedly Notifier 今は使ってないので削除
Kimetrak ネット記事読んで入れたけどとっくの昔に使えなくなったみたい
minerBlock ネット記事読んで入れたけどブラウザで採掘してるサイトもうないから消していいよね
No Coin - Block miners on the web! ネット記事読んで入れたけどこんなことしてるサイトもうないよね
Papago Translate 韓国語に強い自動翻訳として入れたけどもう使ってない
Reading List 全く使ってなかった。なんで入れたのかも覚えてない
RevEye Reverse Image Search デマ検証ツールとして入れた画像検索機能だけど、オススメに出てくる代わりの機能を入れとけば何とかなりそう
Tampermonkey これ消えたら「増田のトラバツリーを開閉するTamperMonkeyスクリプト」が使えなくなってしまうので困るけど代わりを知らない
uBlock Origin 一応代わりはあるみたいだから安心
Vandal 記事読んで入れてみたけどWayback Machineがある限り必要性はあまりなかった
VPN Free - Betternet Unlimited VPN Proxy あまり使わないけどVPN拡張機能は代わりが色々ありすぎてウィルスが怖い
Wayback Machine これ消えたらWebArchive利用が面倒くさいので更新してほしい
ユーザー単位のブックマーク履歴ページ(例: https://b.hatena.ne.jp/hatenabookmark/)でAutoPagerizeが有効になってると、はてなブックマークにもともと備わってるページング機能と、ブラウザのAutoPagerize拡張が実施する機能が重複しちゃって、ページングがおかしなことにならない?
実はすごい前々から気になってて、必要があれば一時的にAutoPagerizeを無効化したりして凌いでいたんだけど、ついに意を決して、解決に取り組んでみたよ。
というわけで、いちおう手元でもテストした上で、ブラウザのAutoPagerize拡張が参照しているデータベースのアイテムを編集して実質無効化しておいた。拡張のSITEINFOを更新してみてね。
「ユーザー単位のブックマーク履歴ページ」だけにしか影響はないと思うんだけど、問題があったら教えてほしい。
テスト用
ページが分かれてるサイト記事を、そのまま続けて読むことができる。
慣れるまで違和感があるが、わりとおぬぬめ。
https://chrome.google.com/webstore/detail/autopagerize/igiofjhpmpihnifddepnpngfjhkfenbp?hl=ja
百数件ぐらいの時に横断的に見たりする時とかに便利だったのに、残念。
Masuda A boneを利用します。
http://d.hatena.ne.jp/ku__ra__ge/20080311/p5
下記の設定済みスクリプトをコピペして使えば、Masuda A boneをインストールする必要はありません。
ChromeならTampermonkey、FirefoxならGreasemonkeyをインストールします。
https://chrome.google.com/webstore/detail/tampermonkey/dhdgffkkebhmkfjojejmpbldmpobfkfo?hl=ja
https://addons.mozilla.org/ja/firefox/addon/greasemonkey/
メニューからツール-Greasemonkey-ユーザスクリプトの管理
(もしくはアドオンマネージャのユーザースクリプトをクリック)
var ignore行を編集すれば、好きな言葉を追加できます。
AutoPagerizeに対応していません。
URLが2行連続するとあぼーん対象になってしまうので、本文があればあぼーん対象から除外したい。
// ==UserScript==
// @name Masuda A bone
// @namespace http://www.petitnoir.net/
// @description
// @include http://anond.hatelabo.jp/
// @include http://anond.hatelabo.jp/?page=*
// ==/UserScript==
///////////////////////////////////////////////////////
//あぼーんしたい言葉を「""」でくくって入力します。複数個追加したい場合は「,」でくぎります。
//入力例
// igonore =["あぼーんしたい言葉1","あぼーんしたい言葉2","あぼーんしたい言葉3"]
// var ignore = ["死ね","糞","クソ","くそ","<●>","ばーか","スイーツ(笑)"];
var ignore = ["[0-9a-zA-Z/\-]https?://"];
///////////////////////////////////////////////////////
///////////////////////////////////////////////////////
//
var abonemessage = "__";
///////////////////////////////////////////////////////
(function abone(){
//本文
var section = document.evaluate('//div[@class="section"]',document,null,XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,null);
for (i=0; i < section.snapshotLength; i++) {
var sec = section.snapshotItem(i);
var p = sec.textContent;
for (t=0; t < ignore.length; t++){
var reg = p.match(ignore[t]);
if(reg){break;}
}
if(reg){
while(sec.firstChild){
sec.removeChild(sec.firstChild);
}
var message = document.createElement('h3');
message.textContent = abonemessage;
}
}
//言及
var refererlist = document.evaluate('//ul/li',document,null,XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,null);
for (i=0; i < refererlist.snapshotLength; i++) {
var list = refererlist.snapshotItem(i);
var p = list.textContent;
for (t=0; t < ignore.length; t++){
var reg = p.match(ignore[t]);
if(reg){break;}
}
if(reg){
for(y=0;y < 8 ; y++){
list.removeChild(list.firstChild);
}
var message =document.createElement('span');
message.textContent = abonemessage;
list.insertBefore(message, list.firstChild);
}
}
})();
AutoPagerizeを有効にしていると、1ページ目のブコメユーザー数がちゃんと表示されないのと、自動読み込みされた2ページ目以降はmasudalertが有効にならない。
知らずにmasdalertが機能してないって人がいるかもしれないので、そういう人はAutoPagerize側で除外パターンに”http://anond.hatelabo.jp/*”とかを指定しておいてね。
技術的な話はよくわからないので、両立させて下さいってのはあんまり望みません。
ってかもう誰も見てない?
autopagerize incrementalでググるとそれっぽいのが出てくる
こんなかんじの記述をAutopagerizeの適当な場所に追加したら連番URLでも使えるようになるはず
var pages = getElementsByXPath(this.info.pageElement, htmlDoc);
var url = this.getNextURL(this.info.nextLink, htmlDoc);
if (this.info.incremental) {
var exp = new RegExp(this.info.incremental.nextMatch,'i');
var _m = this.info.incremental.nextLink;
var step = this.info.incremental.step || 1;
url = this.requestURL.replace(exp,function(m0,m1){
var n = parseInt(m1,10) + step;
return _m.split('#').join(n);
});
}
var next = getFirstElementByXPath(xpath, doc);
if (next) {
if (this.info.incremental) {
var loc = this.requestURL || location.href;
var exp = new RegExp(this.info.incremental.nextMatch,'i');
var nextLink = this.info.incremental.nextLink;
var step = this.info.incremental.step || 1;
if (loc.match(exp)) {
return loc.replace(exp,nextLink.replace("#",parseInt(RegExp.$1)+step));
} else if (!loc.match(exp)) {
return loc + nextLink.replace("#",step);
}
} else {
return next.getAttribute('href') || next.getAttribute('action') || next.getAttribute('value');
}
}
連番に適応するSITEINFOはこんなかんじになる
pageelementは普通のsiteinfoと同じ
nextlinkはリンクをたどるわけじゃないので意味ないのだが一応書いておく必要があるので'//a'とでも書いておけばいい
url: '^http://matome\.naver\.jp/odai/'
,incremental: {
nextMatch: 'page=(\\d+)'
,nextLink: 'page=#'
}
,pageElement: '//div[@role="main"]'
,nextLink: '//a'
サンプル
広告って言ってるしAutoPagerizeの類ではないんじゃないのかなぁ、と思ったけど、真意は知らない。
Webboyというのがどんなもんか使ったことないからわからないけども、設定いじったのがまずかったかねえ。
下じゃAutopagerizeでクラッシュしたかのような増田もあったしなあ。
http://anond.hatelabo.jp/20110217154516
プニルだと…!
うん。
ここのページアクセスしただけでアホかというほど重くなったからな。
AutoPagerizeのおかげでいったん強制終了するはめになったぜ。
Greasemonkeyが0.9にアップデートされてから?かどうかは分からないけどAutoPagerizeやLDRizeが動かなくて困った。
エラーコンソールを見たらVimperatorプラグインのldrize_cooperation.jsの
GreasemonkeyService = Cc["@greasemonkey.mozdev.org/greasemonkey-service;1"].getService().wrappedJSObject;
this.addAfter(GreasemonkeyService,"evalInSandbox",function(code,codebase,sandbox){
if(sandbox.window.LDRize != undefined &amp;&amp; sandbox.window.Minibuffer != undefined){
でエラーになっていた。
greasemonkey.jsをみてみたら
evalInSandbox: function(code, sandbox, script) {
で0.8のgreasemonkey.jsは
evalInSandbox: function(code, codebase, sandbox, script) {
だった。
- this.addAfter(GreasemonkeyService,"evalInSandbox",function(code,codebase,sandbox){ + this.addAfter(GreasemonkeyService,"evalInSandbox",function(code,sandbox,script){
したらAutoPagerizeは動くようになった
LDRizeはこれでもまだ動かない。Vimperatorを無効にしても同じ。
どうやらGreasemonkey 0.8ではMinibufferでのwindowとLDRizeでのwindowが同一のXPCNativeWrapperオブジェクトだったけど0.9では別のオブジェクトになったようだ。だからLDRizeでのwindow.MinibufferもundefinedになるしGM_MinibufferLoadedのイベントリスナーを設定してもwindowが違うから発行されないということみたい
ううむ
追記
0.9.0から0.9.1の間のこの変更が原因ぽい…
https://github.com/greasemonkey/greasemonkey/commit/6a4ffd52c90091714e6f49376ef07e2ce5009f79
増田民ともあろうものが、いまさらAutoPagerizeの導入ごときではしゃぐとは…。
例えば、autopagerizeでpage1, page2, page3とページングされるべきところなのに、
page1, page2, page2などと実行される人や、
niconicofavlistでニコ動のお気に入りマイリストのコンテナが二個も表示される人へ。
↓
どうも、AVG Safe Searchが最新Firefoxと相性が悪い模様。
FirefoxにインストールされているGreasemonkeyスクリプ - ブラウザ - 教えて!goo
http://oshiete.goo.ne.jp/qa/6283865.html
の回答5にもあるが、AVG Safe Searchを無効にしたら治った。
↓
動作から推測するに、AVG Safe Searchは一定時間ごとに何らかのチェック動作を行うらしい。
これがGreasemonkeyの動作と相性が悪いらしい。