[SFDC]IE11×コミュニティの公開Visualforceページ上でクロスドメインAjaxが動かない件(IServerXMLHTTPRequest2)

IServerXMLHTTPRequest2 とかいう謎オブジェクト

  • Visualforceベースのコミュニティの外部に公開しているVisualforceページ
  • IE11でアクセス

上記の条件で、Visualforce内にクロスドメインなAjax処理を書いてもうまく動かない。
(サーバ側はちゃんとCORSのヘッダ返却してる)

こういうシンプルなやつ。2行目のopenするところでこけて「SCRIPT5 アクセスが拒否されました」エラーが発生する。
もちろんChrome、Firefoxは動くし、IE11の場合もコミュニティログイン後の画面であれば全く同じ記述で動く。
IE11かつコミュニティの公開ページでのみエラーになる。
どうやら new XMLHttpRequest();IServerXMLHTTPRequest2 という謎のオブジェクトが返却されていることが原因のようだ。この謎オブジェクトがクロスドメイン通信に対応していないっぽい。

偉大な先人が同じ罠にはまって解決していた。

Javascript in Visualforce: new XMLHttpRequest() returns IServerXMLHTTPRequest2 object only on Salesforce/IE

こうすれば良い。素のXMLHttpRequestはSarissa.originalXMLHttpRequestに格納されているのでそこから取るようにする。
Sarissaてなに?と思ってググると古のJSライブラリなのな。それがコミュニティの外部公開ページで使われてると。いやーこれはなかなか気付けなくて焦った。勘弁してほしー

コミュニティもLightningベースで構築しろってことかな。


コメントを残す