Iframe 如何利用dojo/topic跨框架进行通信

Iframe 如何利用dojo/topic跨框架进行通信,iframe,dojo,Iframe,Dojo,我已经在旧版AMD之前的Dojo中实现了这个功能。现在,我已经采用了“现代”Dojo哲学和思维方式,正在转换我的应用程序,我遇到了一些实际障碍 我的问题是关于组织跨iframe使用dojo/topic——接管dojo.publish并订阅的新类的首选方法 在我的基本用例中,我有两个在同一个域上运行dojo 1.10的简单网页,希望它们对广播做出反应。什么是“正确的”和现代的方式来做到这一点,而不回到旧的道场。*风格或污染全球-这将打破格特森·凯利的咒语 应该有一个干净的方法来实现这一点,那么Do

我已经在旧版AMD之前的Dojo中实现了这个功能。现在,我已经采用了“现代”Dojo哲学和思维方式,正在转换我的应用程序,我遇到了一些实际障碍

我的问题是关于组织跨iframe使用
dojo/topic
——接管
dojo.publish
并订阅的新类的首选方法

在我的基本用例中,我有两个在同一个域上运行dojo 1.10的简单网页,希望它们对广播做出反应。什么是“正确的”和现代的方式来做到这一点,而不回到旧的道场。*风格或污染全球-这将打破格特森·凯利的咒语


应该有一个干净的方法来实现这一点,那么Dojo是否有一个官方演示如何使用
Dojo/topic

据我所知,在Dojo中没有一种方法可以处理跨两个不同框架的即时发布/订阅

所以一个解决方案(我实际上是在我的项目中使用它)可以是使用HTML5 在帧之间传递消息

它可以按以下方式工作(伪代码):

示例:从要发布到帧B的帧A:

因此,在框架A中,订阅以框架b为目标的主题,例如框架A中的代码:

// listen to topics in frame a which should be sent to frame b
topic.subscribe('frameb/event', function(data){
    // actually send a message to frame b
    otherWindow.postMessage(data, '*');
});
// publish topic towards frame b
topic.publish('frameb/event', { identification: 'frameb/event', data: {}'});
在框架B中:

// listen to messages from frame a
window.addEventListener("message", receiveMessage, false);

function receiveMessage(event) {
  // republish your message as topic using the property identification within frame b
  topic.publish(event.data.identification, event.data.data);
}
// subscribe to topic which was originally sending by frame a
topic.subscribe('frameb/event', function(data){
   // do smt
});