種別[statuses] aboutme:139032
セクションJRF のひとこと
日時2011年05月30日
元URLhttp://jrf.cocolog-nifty.com/statuses/2011/05/aboutme139032.html

Firefox の XMLHttpRequest で CGI…

Firefox の XMLHttpRequest で CGI からエラーを返すと、Uncaught exception が起きる。onerror とかのハンドラを設定してもダメ。結局、try { } catch { } で囲んでやるほかなかった。
JRF 2011年5月30日

で、exception を無視して request オブジェクトを調べると、status が 0 になり、statusText も responseText も空文字列になる。

Web コンソールのほうには、ちゃんとエラーステータスが返って来ていると表示されているのに、javascript からはまともに  error が処理できなさそうな感じ。

JRF 2011年5月30日

もう仕方がないから、CGI 側のエラー処理を見直し、XML でデータを渡そときは、die するとき $SIG{__DIE__} をキャッチしても、status に 200 を返して、responseText にエラーを示す XML を返すようにした。

JRF 2011年5月30日

で、それが解決したと思ったら、どうもセッション関連でエラーが出てる。CGI のログを調べると、XMLHttpRequest を使ったときだけ、Cookie が渡ってないっぽい。

ググると、クロスドメイン処理のため、Access-Control-Allow-Origin を付けたときは、Credentials に付いても設定する必要があるそう。↓のコードにしたがって解決した。

《Access-Control-Allow-Origin試してみた。その2 - ミルク色の手紙》
http://d.hatena.ne.jp/ushiboy/20100902/1283436155

JRF 2011年5月30日

しかし、そのホストからロードしたスクリプトから XMLHttpRequest で通信してるんで、クロスドメイン制限にはひっかからないはず。実際、Access-Control-Allow-Origin をなくしても、通信はできてる。でも、やっぱり、その場合も Cookie が渡ってないようす。

ゲーっ、それは制限キツいっすよ。javascript も CGI かませてロードさせて、そこにセッションIDしこんどけってこと?いや、結局それでいいんなら、その制限はメンドクサイというだけなのでは?

JRF 2011年5月30日

typo 「データを渡そとき」→「データを渡すとき」。
typo 「に付いても設定」→「についても設定」。
修正 「status に 200 を返して」→「status に 200 をセットして」。

JRF 2011年5月30日

Trackbacks:

《cocolog:70722096》 from JRF のひとこと
http://jrf.cocolog-nifty.com/statuses/2011/11/javas-2.html

JavaScript の Canvas にもオリジン制限があることを知る。開発者向けにブラウザ起動時にそれを無視するオプションはあるようだが、サーバーオーナーやブロガーが回避する方法はなさそう。 

受信: 2012-01-04 14:58:49 (JST)

《aboutme:139035》 from JRF のひとこと
http://jrf.cocolog-nifty.com/statuses/2011/05/aboutme139035.html

Google ChromeのUserScriptの制限がGreasemonkeyに比べて強いので、メインのスクリプトを(ローカルの)httpdからロードし、そのロードさせる部分のみUserScriptとして書くという方針にするとして、「環境変数」を渡すのをどうするか考えた。... 

受信: 2012-01-04 18:56:11 (JST)

後方参照 (1 件)