Umgebung:
- ArcGIS Enterprise Version: 12.1
- Experience Builder Version: 1.20.0
- Browser/OS: Chrome
Zusammenfassung:Ein als Remote-Ressource registriertes benutzerdefiniertes Widget (isRemote: true) im Portal funktioniert korrekt während der Konfiguration einer Experience, aber nach dem Speichern der Experience ändert sich context.isRemote des Widgets auf false und context.folderUrl wird zu einem fehlerhaften Pfad, der die wörtliche Zeichenkette undefined enthält, anstatt die ursprüngliche Remote-URL des Widgets beizubehalten.
Schritte zur Reproduktion:
- Registrieren Sie ein benutzerdefiniertes Widget im Portal als Experience Builder App/Widget, das auf einem externen Server gehostet wird
- Erstellen Sie eine neue Experience und ziehen Sie das Widget auf die Leinwand
- In diesem Stadium zeigt die Inspektion von this.props.context innerhalb des Widgets:
{
"isRemote": true,
"folderUrl": "https://myserver/xwd/customwidget/"
}
- Speichern Sie die Experience
- Nach dem Speichern (oder Neuladen der veröffentlichten App) zeigt derselbe Kontext:
{
"isRemote": false,
"folderUrl": "https://portalURL/apps/experiencebuilder/experience/../cdn/359/undefined"
}
Erwartetes Verhalten:context.folderUrl sollte weiterhin auf die ursprüngliche Remote-URL des Widgets zeigen (oder anderweitig zu einem gültigen, erreichbaren Pfad aufgelöst werden), sowohl vor als auch nach dem Speichern der Experience.
Tatsächliches Verhalten:Das Widget versucht, seine eigenen statischen Ressourcen (in unserem Fall ein iframe, das auf ${context.folderUrl}dist/runtime/assets/some.html zeigt) von einer ungültigen URL zu laden:
https://portalURL/portal/apps/experiencebuilder/experience/../cdn/359/undefineddist/runtime/assets/some.html
was zu einem 404-Fehler führt und dazu, dass das Widget seinen Inhalt in der veröffentlichten App nicht rendert.
Auswirkung:Das benutzerdefinierte Widget ist in der veröffentlichten Produktions-App nicht funktionsfähig, funktioniert jedoch während der Builder-Konfiguration/Vorschau korrekt.
Dieser Fehler wirkt sich auch auf das favicon aus, sodass kein Symbol für das Widget angezeigt wird.
Relevanter Code (Auszug):
<iframe
id="myWidget"
src={`${this.props.context.folderUrl}dist/runtime/assets/some.html`}
width="100%"
height="90%"
/>