nsIURIのインスタンスには2種類ある XULを扱っていると、nsIURIというインターフェースを使う必要のある場面が頻繁に出てきます。大概のメソッドでは、Web上のリソースもローカルのファイルも位置情報をこのnsIURIの形で渡してやれば万事OKなのですが、希に処理に失敗する場合があります。僕は、バックアップしておいた情報からブラウザのヒストリを復元する処理でこの問題に引っかかりました。 これは、「nsIURIのインスタンス」として生成したインスタンスはそのままではnsIFileURLとして扱えないからというのが原因でした。詳しく言うと、nsIURIのインスタンスは Components.classes['@mozilla.org/network/standard-url;1'].createInstance(Components.interfaces.nsIURI) で生成することが