从iframe中的纯JavaScript调用Ember动作
Invoke Ember action from plain JavaScript in iframe
我在ember应用程序中嵌入了一个iframe。我如何从iframe中调用组件的方法?
我想我不知何故需要通过窗口获得ember实例。父母,但如何做到这一点,特别是如何触发烬行动?
你将面临两个问题。
首先,在frame的内容是从与app相同的域中加载之前,它是完全隔离的。但是有一种方法可以与这样的框架进行通信,window.postMessage
因此,在iframe内,应该执行这样的代码:
window.parent.postMessage({action: 'sayHi'}, '*');
第一个参数是要发送到父窗口的数据(我只是把动作字段放在那里,但你可以添加其他信息,你需要传递)
第二个问题是调用ember动作。我建议在应用程序路由的beforeModel
钩子中定义消息侦听器。当用户加载应用程序时,这个钩子将被执行一次。这使它成为一个正确的位置。
beforeModel() {
window.addEventListener("message", receiveMessage, false);
var that = this;
function receiveMessage(event) {
var origin = event.origin || event.originalEvent.origin; // For Chrome, the origin property is in the event.originalEvent object.
// Here you want to check origin, but in twiddle its null, try on ur machine...
var data = event.data;
if (data.action !== undefined) {
that.send(data.action);
}
}
}
这段代码将调用application路由的操作。在它们里面,你可以操作你的应用程序。我创建了一个twiddle来演示这种方法。相关文章:
- 从全局函数调用Ember控制器上的方法
- 加载Ember.js后调用函数
- Ember.js-模型find()方法中的异步调用
- Ember 1.10-升级错误-模板必须是一个函数.您是想调用Ember.Handlebars.compile(“..”
- 未捕获错误:在未加载模板编译器的情况下,无法调用“compile”.请在调用“compile”之前加载“ember te
- 如何在Ember中转换到另一个路由时调用一个方法
- Ember添加了对转换调用上下文(路由/控制器)的检查
- Ember与videoJS函数调用
- 父操作可防止在 ember.js 中调用提交操作
- Ember数据FixtureAdapter hasmany-无法调用方法'toString'的未定义
- Ember.js - 在车把内初始化的视图中调用方法
- 在 Ember.js 2.3 中,如何将 hasMany 异步调用编译为 ember 中的一个调用而不是多个调用
- Ember.js在哪里调用 this._super()
- 在 {{#each}} 之后调用代码已在 ember.js 中呈现
- 如何使 ember 组件从服务器获取数据.将 AJAX 调用放在组件中似乎不是处理此问题的好做法
- ember - 控制器操作仅由输入字段调用,而不由按钮调用
- 如何将模板与加载了从 ember.js 中的调用模板传递的数据的文本框一起使用
- 绑定此内容以供以后在 Ember 中调用的方法
- 将ajax调用的响应存储在ember中
- 从iframe中的纯JavaScript调用Ember动作