如何在Workshop应用中使用iframe组件并调用Slate变量
在Foundry Workshop中使用iframe组件与Slate变量交互的完整指南
一、基础配置:iframe核心参数正确绑定
首先明确iframe组件的几个关键输入项:
- URL:支持静态地址或绑定Slate字符串变量实现动态加载。如果需要切换加载页面,把目标URL存在Slate变量里,在iframe组件的「URL」输入框选择该变量即可生效。
- 键(Key):这是唯一标识当前iframe实例的字符串,后续消息通信全靠它匹配。你之前用字符串Slate变量没生效,大概率是两个问题:要么变量为空字符串未正确赋值,要么
sendMessage/getMessage动作里指定的键和iframe组件的键不匹配。确保变量是非空字符串,且两处的键完全一致(大小写敏感)。
二、输入/输出与事件触发逻辑
输入项
除了URL和键,还有「允许全屏」「允许支付」等权限类开关,可根据需求勾选,也能绑定布尔型Slate变量动态控制。
输出项
iframe组件会输出两类核心内容:
- 加载状态:
loading/completed/error,可绑定到Slate变量,用来做加载提示或错误处理。 - 接收的消息:当iframe发消息过来时,通过
getMessage动作把消息内容存到指定Slate变量中。
可触发事件
onLoad:iframe加载完成时触发,可绑定Slate动作(比如更新状态变量、显示成功提示)。onError:iframe加载失败时触发,用于错误捕获和用户提示。onMessage:收到iframe发送的消息时触发,必须绑定getMessage动作才能将消息存入Slate变量。
三、Slate与iframe的消息通信实战
1. Workshop → iframe 发送消息(用Slate的sendMessage动作)
步骤:
- 在Slate中创建动作,选择「sendMessage」。
- 「目标键」选择你给iframe组件设置的键(必须完全匹配)。
- 「消息内容」可写静态值,也可选择Slate变量(支持字符串、数字、对象类型)。
- 给按钮或其他触发源绑定这个动作,触发后消息就会发送给指定iframe。
iframe内部接收消息的代码示例:
window.addEventListener('message', (event) => { // 生产环境建议校验origin避免跨域风险 // if (event.origin !== '你的Workshop域名') return; console.log('收到Workshop的消息:', event.data); // 这里可基于收到的内容做业务逻辑处理 });
2. iframe → Workshop 发送消息(触发Slate的getMessage动作)
步骤:
- 在iframe组件的事件配置里,找到「onMessage」,绑定一个Slate动作并选择「getMessage」。
- 在「getMessage」动作中,选择一个Slate变量(建议用对象类型,方便接收复杂消息)存储消息内容。
- 在iframe内部编写发送消息的代码:
// 发送字符串消息 window.parent.postMessage('来自iframe的消息', '*'); // 生产环境建议指定具体的Workshop域名 // 发送包含结构化数据的对象消息 window.parent.postMessage({ type: 'data_sync', content: '需要传给Slate的变量内容' }, '*');
执行这段代码后,Workshop的getMessage动作会自动把消息存入你指定的Slate变量,后续即可用该变量做其他业务逻辑。
四、常见问题排查
- 键不生效:检查Slate变量是否有非空值,
sendMessage的目标键和iframe组件的键是否完全一致。 - 消息收不到:
- 检查iframe内部的
postMessage是否执行,targetOrigin是否设置正确(测试可用*,生产必须指定Workshop域名)。 - 确认Workshop里的iframe组件已绑定
onMessage事件到getMessage动作。 - 查看浏览器控制台是否有跨域报错,若有需配置iframe页面的CORS或确保域名匹配。
- 检查iframe内部的
内容的提问来源于stack exchange,提问作者Arthur
相关产品推荐
相关产品推荐

