環境:
- ArcGIS Enterprise バージョン: 12.1
- Experience Builder バージョン: 1.20.0
- ブラウザ/OS: Chrome
概要:Portalでリモートリソース(isRemote: true)として登録されたカスタムウィジェットは、Experienceの設定中は正しく動作しますが、Experienceを保存した後、ウィジェットのcontext.isRemoteがfalseに変わり、context.folderUrlが元のリモートURLを保持せず、undefinedという文字列を含む不正なパスになります。
再現手順:
- Portalでカスタムウィジェットを外部サーバー上でホストされるExperience Builderアプリ/ウィジェットとして登録する
- 新しいExperienceを作成し、ウィジェットをキャンバスにドラッグする
- この段階で、ウィジェット内のthis.props.contextを確認すると以下のように表示されます:
{
"isRemote": true,
"folderUrl": "https://myserver/xwd/customwidget/"
}
- Experienceを保存する
- 保存後(または公開アプリをリロード後)、同じcontextは以下のようになります:
{
"isRemote": false,
"folderUrl": "https://portalURL/apps/experiencebuilder/experience/../cdn/359/undefined"
}
期待される動作:context.folderUrlはExperienceの保存前後でウィジェットの元のリモートURLを指し続けるべき(または有効で到達可能なパスに解決されるべき)です。
実際の動作:ウィジェットは自身の静的リソース(今回の場合、${context.folderUrl}dist/runtime/assets/some.htmlを指すiframe)を無効なURLから読み込もうとします:
https://portalURL/portal/apps/experiencebuilder/experience/../cdn/359/undefineddist/runtime/assets/some.html
その結果404エラーとなり、公開アプリ内でウィジェットがコンテンツをレンダリングできません。
影響:カスタムウィジェットはBuilderの設定/プレビュー中は正常に動作しますが、公開された本番アプリでは機能しません。
このバグはfaviconにも影響し、その結果ウィジェットにアイコンが表示されません。
関連コード(一部抜粋):
<iframe
id="myWidget"
src={`${this.props.context.folderUrl}dist/runtime/assets/some.html`}
width="100%"
height="90%"
/>