自定义扩展疑难解答
本文针对在创建自定义扩展时最可能遇到的问题,提供了一些解决方案,这些解决方案大致按照开发过程中遇到的顺序排列。
快速核对清单
如果某些功能无法正常工作,请先验证以下内容:
-
Node.js的版本为18或20 (
node --version)。 -
您已登录(
aio login)并使用正确的组织/项目/工作区(aio console where)。 -
扩展点名称完全匹配,包括版本:
fusion/nav-organization/1。 -
getWidget()中的url与您的应用程序中的路由匹配。 -
您可见的UI调用
attach({ id })。 -
您在Fusion中查看的扩展集是正确的:
- 要查看Stage内部版本,请部署到Stage,然后在Fusion配置文件中打开舞台扩展开关(“产品设置”>“Fusion配置文件”>“首选项”)。
- 要查看已发布的扩展,请部署到生产环境并获得批准。
错误1060:“扩展点不存在”
完整消息: CoreConsoleAPISDK ... 1060: Extension point 'fusion/nav-organization/1' does not exist在aio app deploy期间。
含义:您的Adobe组织尚未启用Fusion扩展点(“已载入”)。 Adobe会在部署时验证组织的目录中是否存在扩展点。 这是您的代码或YAML的 不是 问题。
修复:请求Fusion团队加入您的IMS组织的扩展点(fusion/nav-organization/1和/或fusion/nav-team/1)。 当您请求载入时,包括:
- 您的IMS组织ID (
XXXX@AdobeOrg), - 您所需的扩展点,
- 您的 Developer Console项目和工作区 名称。
确认载入后,重新运行aio app deploy。
“等待来自target iframe的初始消息”/面板永远旋转
含义: Fusion打开了您的可见UI,但未完成握手,因此Fusion超时。
常见原因:
attach仅在注册组件中,不在可见的小部件中。getWidget()中的url指向渲染 注册 组件(或空白页面)而不是您的小组件的路由。- 传递给
attach的id与register中使用的id不同。 它们必须相同,因此请将它们保留在Constants.js中。
修复:确保您的 可见 组件调用attach({ id }):
useEffect(() => {
attach({ id: extensionId }).catch(console.error);
}, []);
有关详细信息,请参阅生成自定义扩展UI。
导航按钮未出现在Fusion中
如果您的自定义扩展的导航按钮未在Fusion中显示,请依次检查以下各项:
- 您是否查看了正确的扩展集? 默认情况下,Fusion仅显示已部署到生产环境并批准的已发布扩展。 如果要测试Stage内部版本,请在Fusion配置文件(“产品设置”>“Fusion配置文件”>“首选项”)中打开Stage扩展开关,然后重新加载。 阶段项标记为(阶段)。
有关详细信息,请参阅发布您的自定义扩展。 - 是撤消还是撤回? 已撤销或撤销的扩展停止出现在Fusion中,并且没有错误。 如果以前工作的按钮消失,请先确认该按钮在Adobe Exchange中仍处于活动状态,然后再查找代码问题。
- 是否将其部署到正确的工作区? 使用暂存测试开关时,将部署到您实际加载的工作区和暂存工作区。
- 是否将其部署到正确的组织? 使用您部署到的相同 IMS组织中的帐户登录到Fusion。
- 它是否位于正确部分?
fusion/nav-organization/1显示在 组织 下;fusion/nav-team/1显示在 团队 下(您必须先选择一个团队)。 - 是否存在扩展点名称拼写错误? 它必须完全读取
app.config.yaml和文件夹的ext.config.yaml包含路径中的fusion/nav-organization/1。
按钮出现,但面板为空白
如果出现按钮但面板为空,请检查以下各项:
- 路由不匹配:来自
getWidget()的url(如/index.html#/my-widget)必须与App.js中的<Route>匹配。 不匹配加载不带组件的页面。 - JavaScript错误:打开浏览器的开发人员工具(F12) > 控制台选项卡,并查找来自iframe的错误。 修复报告的错误并重新部署。
- 标题缺失/重复:
getWidget()中的hideWidgetHeader控制Fusion是否在UI上方显示标题。 如果您渲染自己的标头,请将其设置为true。
iframe被阻止(内容安全策略/“拒绝帧”)
Fusion仅允许在Adobe的App Builder CDN (*.adobeio-static.net)上托管的扩展,默认情况下,aio app deploy会将您的文件放在该CDN上。 如果您将UI托管在其他位置,例如自定义域,则Fusion拒绝加载它。 按照文档说明通过App Builder部署,或询问Fusion团队您的域是否可以部署。
上下文为空或已过时
- 加载后立即为空:解析后
attach读取上下文,而不是之前。 在此之前,将显示“正在连接……”状态。 - 当用户切换组织或团队时未更新:订阅
contextchange事件并重新读取处理程序中的密钥。 有关详细信息,请参阅“生成自定义扩展UI”一文中的阅读上下文Fusion共享。 - 日期错误:日期字段以ISO 字符串形式到达,而不是
Date对象。 将它们包装在new Date(...)中。 请参阅Fusion上下文引用的文章中的日期。
调用API失败,并出现CORS错误
症状:当您的UI直接调用Workfront/Fusion API时,浏览器控制台显示“无‘Access-Control-Allow-Origin’标头”(或请求被阻止)。
修复:不要从浏览器调用这些API。 通过您自己的App Builder 运行时操作(服务器端,无CORS)路由调用,并让访客使用相对的同源URL调用该操作。 有关详细信息,请参阅调用Workfront和Fusion API。
即使使用有效令牌,代理操作也会返回401
含义:对于require-adobe-auth: true,Adobe网关会在您的操作运行之前验证调用,可以拒绝它或丢弃您的上游需要的自定义标头,显示为401。
修复:在操作 上设置require-adobe-auth: false并 自己强制执行授权。 操作中需要Authorization持有者,将其转发到上游,并保持严格的目标。 请参阅require-adobe-auth: true与false。
融合GET /api/v3/hooks返回400
含义:挂接终结点为团队范围,因此teamId是必需的查询参数。
修复:调用/api/v3/hooks?teamId=<team.id>。 钩子只为活动团队返回。 要覆盖组织,请循环其团队并合并。 相反,方案接受organizationId。 查看Fusion v3 API详细信息。
aio个错误
aio: command not found: CLI未安装或未安装在您的路径上。 重新运行npm install -g @adobe/aio-cli,然后打开新终端。- 在全新节点版本上生成/部署失败。请使用节点18或20 LTS。 非常新的、非LTS版本有时会破坏工具链。
- “您不是开发人员”/看不到您的组织:您的Adobe组织管理员必须向您授予 开发人员 角色和App Builder访问权限。 有关详细信息,请参阅设置用户界面扩展工具和帐户。
- 401 /部署或发现期间的令牌无效:您的会话已过期或您正在混合环境。 运行
aio logout,然后运行aio login,确认aio console where,并部署到要加载的工作区。
收集支持信息
收集此信息以更快地作出诊断:
- 您运行的确切命令和 full 错误输出。
- 您的IMS组织ID、项目和工作区。
- 您定位的扩展点。
aio app deploy是否成功,扩展是否为已发布(或者,对于暂存测试,暂存扩展开关是否打开)。- 在Fusion中打开面板时,浏览器控制台 (F12)中的任何错误。