(2008/07/06分割)この記事は[[b2rイメピタ対応]]の旧記事です。特段の理由がある方以外は新記事の改造のほうが手軽で有用です。 !!!bbs2chreader(b2r)でイメピタ(imepita.jp)対応(旧) [User Agent Switcher|https://addons.mozilla.org/ja/firefox/addon/59]などでInternet Explorer 7を選択することでこの方法も有効のようです。メリット・デメリットがわかる方はこの方法も有用です。 ---- いわゆる専ブラはイマイチしっくり来なくてFirefoxのアドオンである[bbs2chreader|http://bbs2ch.sourceforge.jp/](b2r)を使ってるんですが、これは標準状態だと[イメピタ|http://imepita.jp]の画像をポップアップしてくれません。 他の専ブラでは対応しているので、それならばと対応してみました。 *RefControlを改造する *スキンを改造する の2段階です。 この意味するところは、 *HTTPリクエストヘッダのRefererを書き換える *b2rにイメピタのURLを画像と認識させる *b2rに画像への直接要求をさせる です。 !!RefControl改造 まずは[RefControl|http://www.stardrifter.org/refcontrol/]というアドオンをFireFoxにインストールします。これはHTTPリクエストヘッダのRefererを変更できるアドオンです。 RefControlはそれなりにがんばってるんですが、設定方法の自由度が足りません。ので、改造します。 Firefoxの拡張機能のフォルダ(extensions)で{455D905A-D37C-4643-A9E2-F6FEFAA0424A}というフォルダを探します。この下のcomponents\refcontrolComp.jsを編集します。プロファイルフォルダのトップからいきなりrefcontrolComp.jsを検索しても早いと思います。 performVariableInterpolation: function(oChannel, sRef) { var vars = { '$': '$' }; // $$ is a literal $ var arr = という箇所を探します。RefControlのバージョン0.8.10では18行目にあります。ここに performVariableInterpolation: function(oChannel, sRef) { if(sRef.match(/^script:(.+)/i)){ return eval(RegExp.$1); } var vars = { '$': '$' }; // $$ is a literal $ var arr = というように3行書き足し上書き保存します。この改造は、RefControlの設定画面から任意のJavaScriptでRefererを設定できるようにしています。 FireFoxを起動し、RefControlの設定画面を出します。 Add Siteボタンを押し、設定を追加します。 {{ref_image RefControlSetting.png}} Site:欄にimepita.jpと書き、Action:はCustom:を選択します。 そして右の欄には script:oChannel.URI.spec.replace(/image\/(\d{8}\/\d{6})/i, "$1"); と書き、OKを押して戻ります。 !!スキン改造 スキンによって改造箇所・方法は異なるため、ここではbbs2chreaderバージョン0.4.11に付属のデフォルトスキンについて解説します。まずはextensions\{0B9D558E-6983-486b-9AAD-B6CBCD2FC807}\defaults\skinあたりにあるpopup.jsを適当なエディタで開きます。 まずは169行目あたりから for(let [index, node] in b2rPopup.xpathEvaluate(xpath)){ if(!node.href.match(/\.jpg$|png$|gif$/i)) continue; node.setAttribute("onmouseover", "b2rPopup.imagePopup.mouseOver(event)"); node.setAttribute("onmouseout", "b2rPopup.mouseOut(event)"); } という箇所があります。 ここに for(let [index, node] in b2rPopup.xpathEvaluate(xpath)){ if(node.href.match(/http:\/\/imepita\.jp\/\d{8}\/\d{6}/i)){ node.setAttribute("onmouseover", "b2rPopup.imagePopup.mouseOver(event)"); node.setAttribute("onmouseout", "b2rPopup.mouseOut(event)"); continue; } if(!node.href.match(/\.jpg$|png$|gif$/i)) continue; node.setAttribute("onmouseover", "b2rPopup.imagePopup.mouseOver(event)"); node.setAttribute("onmouseout", "b2rPopup.mouseOut(event)"); } と5行書き足します。 これで、まずb2rがイメピタのURLを画像へのリンクと認識します。 次に187行目あたり(上記追加前は183行目あたり)から var image = document.createElement("img"); image.style.width = "120px"; image.style.borderStyle = "none"; image.src = targetNode.href; という箇所があります。 ここに var image = document.createElement("img"); image.style.width = "120px"; image.style.borderStyle = "none"; if(targetNode.href.match(/(http:\/\/imepita\.jp)(\/\d{8}\/\d{6})/i)){ image.src = RegExp.$1 + '/image' + RegExp.$2 ; }else image.src = targetNode.href; と3行書き足します。 これでb2rが画像への直接要求を行ってくれます。 他のスキンの場合も対処の方針は基本的に一緒です。 改造箇所もb2rPopup.imagePopupの中になると思います。 ちょっとJavaScriptと正規表現がわかる方なら簡単でしょう。 そのうち専ブラ対策されちゃうかもわかりませんがね…。 !!独り言 後日気づいたんですが、ひょっとしてリファラってそこまで厳密じゃなくても良いのかな?だとすればRefControlの改造は不要かも? まぁいいか、より正確にしてるんだし…。