ユビキタスの街角

Saturday, January 07, 2006

JavaScriptから別ドメインと通信する方法

XMLHttpRequestでは、セキュリティ対策のため別ドメインと通信できないことになっているようだが、 GoogleMapsなどではどうやってGoogle.comとの通信をやっているのだろう? AllAboutの高橋氏の記事 によると、GoogleMapsは 「XMLHttpRequestをふんだんに使用したアプリというわけではありません」らしいのだが。
高橋氏のどこかの記事では、 別ドメインと通信したい場合は サーバ側でなんとかするか裏技(?)を使うかすればよいと書いてあった気がするが、 mala氏の iframeを使ってXMLHttpRequestをエミュレートする方法 で紹介されているように iframeを利用すればなんとかなるようである。 JavaScriptでiframeを作成し、その中から別ドメインのページを参照して その結果を読み出せばいいということのようである。
技を駆使してなんとかなるのであれば 変な「セキュリティ対策」なんかやらんとってほしいものである。

5 Comments:

  • IFRAMEは別ドメインのページを「表示」はできますがデータとして読むことはできません。IFRAMEを使うケースは古いブラウザとの互換性のためです。

    外部ドメインのデータを読むには、
    - プロキシCGIなどを経由する
    - greasemonkeyを使う
    - scriptタグを使う
    などの方法があります。

    scriptタグを使うのはこういう。
    http://la.ma.la/misc/js/suggest.html
    http://del.icio.us/help/json

    scriptタグを使って
    hoge = {key: value};loadComplete();
    という形式のデータを受け渡す方法がjsonpなんて呼ばれてたりします。hogeの部分の変数名と、読み込み完了時に実行する関数名を任意に指定できるのが特徴。
    http://ajaxian.com/archives/jsonp-json-with-padding

    この手の新語は次々でてくるのであまり普及はしてないですが、米Yahoo!のAPIがこの形式をサポートしてたりします。
    http://developer.yahoo.net/common/json.html

    By Blogger ma.la, at 5:03 PM  

  • This comment has been removed by a blog administrator.

    By Blogger llamerada, at 10:05 PM  

  • google maps APIを利用して、地図を貼り付けた場合、googleとの通信が発生するのは地図画像の読み込みだけです。外部ドメインからの画像の読み込みは許可されてますので、外部ドメインの問題は発生しません。

    By Blogger llamerada, at 10:47 PM  

  • どうもいろいろ情報ありがとうございました。
    間違った記述はどう直せばいいのかな?

    ローカルマシンに持ってる写真に対し、GoogleMapsを使って位置情報を登録できるようにしようとしているのですが、なかなかうまいやり方がわからなくて困っております。教えていただいた方法を駆使してやってみたいと思いますが、できるかなぁ...

    By Blogger 増井, at 11:02 PM  

  • 手抜きですが作ってみました。
    http://la.ma.la/misc/gmaps/

    GoogleMapsで現在表示している位置をローカルCGIに報告、という形式。

    APIを使うのが真っ当だとは思いますが、自前でデータを持ってないと地名で検索したりできなさそうなので。

    By Blogger ma.la, at 5:58 AM  

Post a Comment

Links to this post:

Create a Link

<< Home