Home > Latest topics

Latest topics > タブカタログでTab Scopeをパクってみた

宣伝。日経LinuxにてLinuxの基礎?を紹介する漫画「シス管系女子」を連載させていただいています。 以下の特設サイトにて、単行本まんがでわかるLinux シス管系女子の試し読みが可能! シス管系女子って何!? - 「シス管系女子」特設サイト

タブカタログでTab Scopeをパクってみた - May 06, 2007

第2回拡張機能勉強会でTab Scopeのプロトタイプを見てから、公開されたらぜひタブカタログでこの機能を使わせてもらおうと思っていて、気がついたら公開されてたので早速見てみたんだけども、他の拡張機能とかで機能を利用できるような設計になってなかったので、仕方ないから関係してるコードをコピペしてタブカタログに仕込んでみた。

ただ、画像を含むリンクで画像の前後に改行があったりすると上手くいかなかったので、そこだけ手を加えた。

具体的にはこんな感じにしてある。


getImageInLink : function(aNode) 
{
  var d = aNode.ownerDocument;
  try {
    var xpathResult = d.evaluate(
        'descendant::*[local-name() = "img" or local-name() = "IMG"]',
        aNode,
        d.createNSResolver(this.NSResolver),
        XPathResult.FIRST_ORDERED_NODE_TYPE,
        null
      );
  }
  catch(e) {
    return null;
  }
  return xpathResult.singleNodeValue;
},
NSResolver : { 
  lookupNamespaceURI : function(aPrefix)
  {
    switch (aPrefix)
    {
      case 'xul':
        return 'http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul';
      case 'html':
      case 'xhtml':
        return 'http://www.w3.org/1999/xhtml';
      case 'xlink':
        return 'http://www.w3.org/1999/xlink';
      default:
        return '';
    }
  }
},

(中略)

var walker = aWindow.document.createTreeWalker(doc,
                NodeFilter.SHOW_ELEMENT, filter, false);
for (var node = walker.firstChild(); node != null; node = walker.nextNode())
{
  if (
    node.hasChildNodes() &&
    (img = this.getImageInLink(node))
    )
    node = img;
  var box = doc.getBoxObjectFor(node);
  var l = box.screenX;
  var t = box.screenY;
  var r = l + box.width;
  var b = t + box.height;
  if (l <= aScreenX && aScreenX <= r && t <= aScreenY && aScreenY <= b)
    return node;
}

別にXPathでやる必要はないんだけどね……

Tab Scopeに比べて「戻る」も「進む」も「再読み込み」も何も操作のためのUIがなくて、ただリンクを辿ることとスクロールすることしかできないんで、実用性はあんまりないけど、まあ、やってみたかったんですよ。

分類:Mozilla > 拡張機能, , , , , , 時刻:21:46 | Comments/Trackbacks (1) | Edit

Comments/Trackbacks

no title

おっ、パクっていただいて光栄です!今さらながらのノード直下にのノードが存在するとは限らないことに気付きました。

Commented by Gomita at 2007/05/09 (Wed) 23:59:53

TrackBack ping me at


の末尾に2020年11月30日時点の日本の首相のファミリーネーム(ローマ字で回答)を繋げて下さい。例えば「noda」なら、「2007-05-06_tabcatalog.trackbacknoda」です。これは機械的なトラックバックスパムを防止するための措置です。

Post a comment

writeback message: Ready to post a comment.

2020年11月30日時点の日本の首相のファミリーネーム(ひらがなで回答)

Powered by blosxom 2.0 + starter kit
Home

カテゴリ一覧

過去の記事

1999.2~2005.8

最近のコメント

最近のつぶやき