以下の節に列挙されている状況下で、Federated Experience Manager (FXM) ビーコン スクリプトのAJAX要求が失敗します。事象が発生した場合、ブラウザ コンソールで、以下のエラーを確認することができます:
XMLHttpRequest cannot load http://your.domain.com/sitecore/api/ssc/Beacon...
No 'Access-Control-Allow-Origin' header is present on the requested resource.
Origin 'http://your.domain.com' is therefore not allowed access.
この事象は、Federated Experience Manager (FXM)バージョン8.0 Initial Release以降で発生します。本事象は、以下の原因により発生する可能性があります。
initializeパイプラインのServicesWebApiInitializerプロセッサーがまだ実行されていないタイミングで、以下の関数がカスタム コードから呼び出された場合。
GlobalConfiguration.Configure(WebApiConfig.Register);
これは例えば、Global.asaxファイルのApplication_Start()メソッドや、ServicesWebApiInitializerプロセッサーの前に配置されたカスタムのinitializeパイプラインのプロセッサーで呼び出される場合があります。また、これがアプリケーションの初期化へのサブスクリプションを許可するサード パーティのライブラリである場合もあります。例えば、WebActivatorExライブラリは、PreApplicationStartMethod属性で初期化メソッドを特定することができます。
この事象を解決するには:
GlobalConfiguration.Configuration.EnableCors();
IISまたはweb.configファイルでリダイレクトが(例えば、URL Rewrite IISモジュールを使用するなどして)設定されている場合。AJAX Beaconの要求がリダイレクトされると、CORSヘッダが消失し、この問題が発生します。
この事象を解決するには:
Sitecore XPソリューションがAzure Web Appsでホストされている場合、この事象はApp Serviceレベルで設定されたCORSヘッダに起因する可能性があります。Azure App ServiceがカスタムのCORSヘッダを設定するように構成されている場合、FXMコードが設定したCORSヘッダが上書きされることになります。
この問題を解決するには: