-

XMLHttpRequestをクロスドメインで行う方法(Firefox)

追記: 以下の方法はFirefoxXMLHttpRequestのクロスドメインのセキュリティ制限を回避する(無視する)方法ですが、Firefoxでしか使えずかつJSのコードに変なものを書かないといけないので、単純なデバッグ・実験用途にしか使えないです。それに、サービス側がJSONPに対応していればそれを使うし、JSをロードするドメインのサーバに簡単なリバースプロキシを用意するとクロスドメインではなくすることがすぐ可能なので、FirefoxでPriviledgeManagerをごにょごにょするより、最初からFirefox以外でも通用する方法をとった方が、二度手間にならなくて楽だと思います。


Livedoor Readerをちょっといじいじしてみようと思いつきで始めた。(Ajax初心者)
トップのHTMLと、そこからロードされるたくさんの*.jsを wget (-k でざっくりリンク変換しつつ) で保存。jsファイルもローカルに保存。で、<script>のsrcを適当にローカルの方を指すようにした。
そこまでは良かったものの、HTML開いたらエラー。

uncaught exception: Permission denied to call method XMLHttpRequest.open

クロスドメインXMLHttpRequestはセキュリティ的に許可されないということか。なるほど。
で、回避策。
captain.at -&nbspcaptain リソースおよび情報

以下のコードをXMLHttpRequestのopen()の前に入れたらできるように。

try {
    netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead");
} catch (e) {
    alert("Permission UniversalBrowserRead denied.");
}

セキュリティの警告が出るのでよく読んでAllowです。

が、まだ同じエラーが出る。。。別のタイミングで。どこだ・・・

***

あとopen()に渡されるURLはホスト部分がなくパスだけになっていたりするので、引数に適当にホスト名を補ってアクセス先がちゃんとサーバになるように。

if (/^\//.test(ap)) {
    ap = "http://reader.livedoor.com" + ap;
} else if (/^http:/.test(ap)) {
    ;
} else {
    ap = "http://reader.livedoor.com/reader/" + ap;
}