2013年4月10日

ウェブページで使用されているフォントを調べる

ウェブフォントが使われているページが結構増えているようです。日本語圏ではサイズの問題からあんまり実用的ではないのですが、アルファベットの少ない言語では結構便利そうなモノです。

さて、ウェブページを保存するとなると、使われているウェブフォントも保存しなくちゃいけません。しかし今のところ CSS を直接パースするという手段は取っていないので、要素を全部眺めながら使われているフォントを調べて行く必要があります。

そこで使うのが inIDOMUtils です。getUsedFontFaces メソッドに調べたい要素の入った Range を渡すと nsIDOMFontFaceList を返してくれます。

let domUtil = Cc ["@mozilla.org/inspector/dom-utils;1"].getService (Ci.inIDOMUtils);
let range = document.createRange ();
range.selectNode (node);
let fontList = domUtil.getUsedFontFaces (range);
for (let j = 0, length = fontList.length; j < length; j ++) {
  let font = fontList.item (j);
  dump (font.URI);
}

さて、node は調べたい要素なのですが、ここに document.body を入れればその中で使われているフォントを全部調べてくれます……と思って使ってました。実際調べてくれはするんです。

しかし、ページが複雑になってくる等、特定の条件で何故かフリーズするんです。詳細は調べ尽くせなかったので原因は他にあるかもしれませんが。

で、今のところ使っている回避策としてはテキストノード (nsIDOMText) のみに使用するという事。フォントが使われている場所、といえばほぼテキストノードなので、これで用件はだいたい満たせた状態になります。UnMHT では保存時に他のスタイル情報を取得するために DOM ツリーを端から端まで走査するので、そのついでに、という感じであればそんなに処理を追加する事なく書けたのはラッキーだったのかもしれません。

0 件のコメント:

コメントを投稿