Javascript 在angularjs中交换消息

Javascript 在angularjs中交换消息,javascript,angularjs,angularjs-scope,postmessage,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来交换消息/数据

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
}
});

iframe不能跳过相同的域策略,iframe与父js交互的唯一方式是iframe与父js来自同一域。因此,我认为您正在将iframe重定向回您的应用程序域,在那里您将执行一个JS函数,尝试在父范围内执行某些操作(执行一个函数)

您的函数可以有如下内容

angular.element($('*[ng-app]')).scope();
tha应该获取应用程序$rootScope的作用域,然后您可以执行该作用域中允许的任何操作

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


我使用$('*[ng app]'),因为您有jquery或zizzling.js来形成css选择,但您可以使用任何方法来获取要获取范围的DOM元素。

可以在这两种方法中设置
document.domain
,它们被视为同一来源,假设您可以访问iframe和page来进行正确的操作,但仍然需要位于同一个域下。document.domain只允许您将域更改为最短的域版本,以跳过子域上的相同域限制。据我所知:您无法做到这一点,唯一的方法是创建子域并将其指向另一个域的ip地址,然后使用此新子域在iframe中调用它,相同的主域。如果你碰巧知道我在哪里可以找到不同方法的文献,请发布,我想了解更多。谢谢