此处提供的 API,均为客户端本地通信交互,不会同步到所有用户端。
web 端可以根据参考资料,手动在 web 应用中,添加与 iframe 的交互。
参考资料:
// iframe 不能对 parent 添加 eventListener,iframe 接受消息
window.addEventListener("message", (event) => {
console.log(event);
//...
}, false);
由于存在 native SDK 的使用需求,iframe 必然存在与白板为跨域问题的情况。
// @param message 只要是原始类型(JSON 支持的格式)即可。这个信息,会反应在 message event 的 data 属性中。
// 这里约定 message 格式为{name: "iframe", payload: {任何符合 JSON 格式的内容}}。native bride,会根据 name 来判断是否要需要透传给 native 端
// @param targetOrigin 填写 "*"。改参数为发送到的 url 地址,* 表示所有 url。基于安全应该限定有 url,但是我们为了支持 native,不能这么做,所以请不要发送敏感信息。
// @param transfer,发送消息的 window 引用,这里不需要考虑。
// iframe 向白板发送消息,需要操作使用 parent 进行 postmessage;在 iframe 中,最好做一个判断。
window.parent.postMessage(message, targetOrigin, [transfer]);
//回调函数
function receiveMessageFromIframePage (event) {
// sdk 的回调,会在固定结构 {name: parentWindow, payload:{native 端发送的 JSON 格式内容}}
// native 端只需要填入 payload 中的内容,其他部分有 sdk 进行填写
// 名字不能跟 iframe 发出来的一样,因为这个请求是全局的,本地对 message 的监听,也会同时触发
console.log('receiveMessageFromIframePage', event)
}
window.addEventListener("message", receiveMessageFromIframePage, false);
2.11.5 版本可用
@interface WhiteDisplayer : NSObject
/**
* @param payload 可以传入 字符串,字典,数组,内部会检查其是否是正确的 JSON 格式。
* 由于目前 Android 端无法处理数组,建议传递字符串与字段结构。
*/
- (void)postIframeMessage:(id)payload;
@end
NSString *name = dict[@"name"];
/**
必然存在 name: "iframe" 字段
其他字段由 iframe 自行决定
*/
[[NSNotificationCenter defaultCenter] postNotificationName:name object:self userInfo:dict];
目前 iOS 端,在接受消息到 native bridge 的透传消息后,会发出一个通知名为iframe
的消息,在 userInfo 中附带iframe
侧发出的所有内容。
2.11.5 版本可用
public class Displayer {
//...
/**
* 向 iframe 插件发送字符串信息
*/
public void postIframeMessage(String string) {
bridge.callHandler("displayer.postMessage", new Object[]{string});
}
/**
* 向 iframe 插件发送 key-value 格式的信息。可以自己创建 WhiteObject 的子类进行发送
* @param object
*/
public void postIframeMessage(WhiteObject object) {
bridge.callHandler("displayer.postMessage", new Object[]{object});
}
}
public interface CommonCallbacks {
/**
* 部分自定义消息接口,用于本地客户端与 bridge 网页的内容的一些交互,这些信息,不是所有端都会收到。
* @param object 内容格式会根据情况发送。发送时,均为 JSON 格式。格式内容必然包含 name:
* @since 2.11.4
*/
void onMessage(JSONObject object);
}