lookupdictionary.js のバグフィックス

で書かれているとおり、goo辞書が文字化けしていた。

やっと思い腰を上げて修正に取りかかったのだが、ちょっと苦労。
当初、XMLHttpRequestで受け取ったテキストを

var unicode = Cc['@mozilla.org/intl/scriptableunicodeconverter;1'].
              getService(Ci.nsIScriptableUnicodeConverter);
function convert(str, charset){
  if (!str) return "";
  try {
    unicode.charset = charset;
    str = unicode.ConvertToUnicode(str);
  } catch(e) {}
  return str;
}

こんな関数に掛けてやれば解決するだろうと思っていた*1のだが、何度やってみても上手くいかない。

XMLHttpRequestoverrideMimeTypeメソッドがあるのを思い出して、試しにtext/html; charset=CHARSETを加えてみたところ成功。

挙動から察するに、XMLHttpRequest文字コードの変換までやってくれるみたいね。ただしレスポンス・ヘッダのContent-Typecharsetの指定がないとデフォルトのUTF-8で変換してしまう、という感じだろうか。

しかし、このプラグインを作った時は文字化けしていなかった。goo側の仕様が変わったというより、Firefoxが2から3になった影響が考えられるが、XMLHttpRequestに変更が加わったのだろうか?

*1:XPCOM脳だったのかも