トップ 検索 一覧 差分 ソース ヘルプ RSS ログイン

b2rイメピタ対応(旧)

(2008/07/06分割)この記事はb2rイメピタ対応の旧記事です。特段の理由がある方以外は新記事の改造のほうが手軽で有用です。

bbs2chreader(b2r)でイメピタ(imepita.jp)対応(旧)

User Agent SwitcherなどでInternet Explorer 7を選択することでこの方法も有効のようです。メリット・デメリットがわかる方はこの方法も有用です。


いわゆる専ブラはイマイチしっくり来なくてFirefoxのアドオンであるbbs2chreader(b2r)を使ってるんですが、これは標準状態だとイメピタの画像をポップアップしてくれません。

他の専ブラでは対応しているので、それならばと対応してみました。

  • RefControlを改造する
  • スキンを改造する

の2段階です。

この意味するところは、

  • HTTPリクエストヘッダのRefererを書き換える
  • b2rにイメピタのURLを画像と認識させる
  • b2rに画像への直接要求をさせる

です。

 RefControl改造

まずは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ボタンを押し、設定を追加します。

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の改造は不要かも?

まぁいいか、より正確にしてるんだし…。

最終更新時間:2008年07月06日 23時25分49秒