« 前のひとこと | トップページ | 次のひとこと »

aboutme:139032

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

JRF 2011年5月30日 (月)

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

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

JRF 2011年5月30日 8044

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

JRF 2011年5月30日 0251

で、それが解決したと思ったら、どうもセッション関連でエラーが出てる。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日 5642

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

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

JRF 2011年5月30日 3631

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

JRF 2011年5月30日 3375

« 前のひとこと | トップページ | 次のひとこと »

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/93568/51811589

トラックバックのポリシー

他サイトなどからこの記事に自薦された関連記事(トラックバック)の一覧です。

» cocolog:70722096 from JRF のひとこと

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

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

» aboutme:139035 from JRF のひとこと

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

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

このころのニュース