AEM オーサーカスタムサーブレットページが、Experience Cloud シェルでのスピナーの読み込み時に停止する
Experience Cloud Shell iframeを介してアクセスした場合に、AEM オーサーのカスタムサーブレットのページが読み込み中のスピナーで停止したままになる場合の問題を解決する方法を説明します。
説明 description
AEM オーサーからカスタムサーブレットまたはHTML ページにアクセスする場合、ページはExperience Cloud Shell iframe内で読み込まれます。 この場合、HTML コンテンツがiframe内に存在する場合でも、ページが読み込み中のスピナーオーバーレイで停止したままになります。 この問題は、統合シェルが有効になっている場合に複数のユーザー間で再現可能であり、サーブレットコードに最近の変更はありません。 追加のURL パラメーター(_mrやshell_domainなど)が自動的に追加されます。 同じサーブレット URLを新しいブラウザータブ(統合シェルのコンテキスト外)で直接開くと、スピナーなしでページが正しくレンダリングされます。 統合シェルを無効にするか、ダイレクトリソースパスを介してサーブレットにアクセスすると、ページが期待どおりにレンダリングされます。
環境
- Adobe Experience Manager (AEM) オーサー
- AEM as a Cloud Service(AEMaaCS)とオンプレミスのデプロイメント
症状
- Experience Cloud Shell iframeを介してアクセスした場合、カスタムサーブレットページは読み込み中のスピナーオーバーレイの後ろに隠れたままになります。
- HTML コンテンツはiframe内に存在しますが、表示されません。
- サーブレット URL (シェル外)への直接アクセスは期待どおりに機能します。
原因
Experience Cloud Unified Shellは、読み込まれたページからコンテンツ準備完了シグナルを想定して、スピンオーバーレイを却下します。 標準のAEM エディターフレームワーク JavaScriptを読み込まないカスタムサーブレット応答では、このシグナルは送信されないため、スピナーは無期限に残ります。 サーブレットに直接(シェルの外側で)アクセスすると、この問題が回避されます。
解決策 resolution
問題を解決するには、次の手順に従います。
- Experience Cloud シェルルートを介してカスタムサーブレットにアクセスします(例:
/ui#/aem/your/servlet/path)。 - HTML コンテンツがiframe内に存在するにもかかわらず、ページが読み込み中のスピナーオーバーレイで停止したままかどうかを確認します。
- ブラウザーの「ネットワーク」タブから、完全なサーブレット URL (追加されたパラメーターを含む)をコピーします。
- このURLを(統合シェルのコンテキスト外の)新しいブラウザータブで直接開きます。
- ページがスピナーなしで正常にレンダリングされることを確認します。
- リンク、ブックマーク、またはナビゲーションパスを更新して、統合シェルをバイパスして、サーブレットのリソースパス(例:
/content/your/site/servlet.html)を直接指すようにします。 - AEM環境の他の部分に統合シェルが必要な場合は、この回避策をカスタムサーブレットのワークフローのみに制限してください。 AEMのページ/コンテンツツリーナビゲーションではなく、プレーンリンクまたは別のブラウザータブを介してサーブレットにアクセスすることを確認します。これにより、シェルラッピングルートが生成されます。
- (オプション)
window.top、window.parent、または類似の構成に依存する可能性があるサーブレット出力のクライアントサイドコードを確認します。これらは、統合シェル iframe内で異なる動作する可能性があります。
この回避策を適用した後、ユーザーは読み込み中にスタックしたスピナーを見つけることなく、カスタムサーブレットページにアクセスできる必要があります。