読者です 読者をやめる 読者になる 読者になる

拡張機能では、XMLHttpRequestのクロスドメインに対する制限がなくなる

スポンサーリンク

試しにnsIHttpChannelなんかを触っていて、レスポンスをASCII以外の文字列として取得するためにいちいちnsIConverterInputStreamで変換しなくちゃならなくて面倒だなーとか思っていたのですが、、XMLHttpRequestでクロスドメイン関係なしにアクセスできるのを今知ったので、これからはXMLHttpRequestを使おうと思います。


ちなみに、nsIHttpChannelを使っていたときは、下記のような感じ。

var url = 'http://www.yahoo.co.jp';
var ioService = Components.classes["@mozilla.org/network/io-service;1"]
                  .getService(Components.interfaces.nsIIOService);
var channel = ioService.newChannelFromURI(ioService.newURI(url, null, null))
                .QueryInterface(Components.interfaces.nsIHttpChannel);
var stream = channel.open();

var converterInputStream= Components.classes["@mozilla.org/intl/converter-input-stream;1"]
           .createInstance(Components.interfaces.nsIConverterInputStream);

converterInputStream.init(stream, "EUC-JP", 4096,
      converterInputStream.DEFAULT_REPLACEMENT_CHARACTER);

var str;
var tmp = {};
while (converterInputStream.readString(4096, tmp) != 0) {
  str += tmp.value;
}
alert(str);

めんどくさすぎた。

                                    • -

追記@2007/06/19
openはnsIChannelで定義されているので、わざわざQueryInterfaceする必要無しでした。(brazilさんからのコメント)