解决相同原始策略的一种方法是使用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
}
});
答案 0 :(得分:0)
iframe不能跳过相同的域策略,iframe与父js交互的唯一方法是iframe来自与父级相同的域。因此,假设您正在将iframe重定向回您的app域,在那里您将尝试在父作用域中执行某些操作的JS函数(执行函数)。
你的功能可能有类似的东西
angular.element($('*[ng-app]')).scope();
应该获取你的app $ rootScope的范围,然后你可以执行该范围内允许的任何操作。
从那里你可以广播事件,发出服务通知或执行特定范围的任务。
我正在使用$('* [ng-app]')假设您有jquery或zizzling.js来执行css选择,但您可以使用任何方法来获取您想要获取范围的DOM元素。