在angularjs中交换消息

时间:2014-05-18 20:38:09

标签: javascript angularjs angularjs-scope postmessage

解决相同原始策略的一种方法是使用iframe通过在应用程序本身上注册消息回调事件侦听器来交换消息/数据。

window.addEventListener("message", message_callback);

以及将接收由iframe发布的消息的实际功能

function message_callback(msg)
{
       //do whatever with the data returned in the message that is posted by iframe
}

通过这种设置,我可以将消息发布到iframe,让iframe执行ajax调用,并且在ajax调用成功后,将结果发布回应用程序。

我的问题是,角度来实现这个目标的最佳实践/理想方法是什么?也就是说,如何从iframe发布消息/接收消息?

我在考虑在$ rootScope上放置某种消息回调函数,不过我不确定这是否是最佳实践以及从何处开始

myApp.run(function($rootScope) {
$rootScope.message_callback= function (msg) {
    // do some stuff
}
});

1 个答案:

答案 0 :(得分:0)

iframe不能跳过相同的域策略,iframe与父js交互的唯一方法是iframe来自与父级相同的域。因此,假设您正在将iframe重定向回您的app域,在那里您将尝试在父作用域中执行某些操作的JS函数(执行函数)。

你的功能可能有类似的东西

angular.element($('*[ng-app]')).scope();

应该获取你的app $ rootScope的范围,然后你可以执行该范围内允许的任何操作。

从那里你可以广播事件,发出服务通知或执行特定范围的任务。

我正在使用$('* [ng-app]')假设您有jquery或zizzling.js来执行css选择,但您可以使用任何方法来获取您想要获取范围的DOM元素。