来自不同域的父进程中的Jquery绑定函数

时间:2013-01-10 09:55:45

标签: jquery cross-domain

我的问题与此问题非常类似:execute javascript function in a another iframe when parent is from different domain

我有一个 A.com 域名页面,其中包含2个包含B.com/page1和B.com/page2的iframe

我需要通过点击 B.com/page1 中的按钮(与已经链接的页面相同)在 B.com/page2 iframe中执行功能,但是使用jQuery。

现在我在B.com/page1

中使用此代码
parent.$(parent.document).trigger("myFunction", [myParams]);

并使用

在B.com/page2中获取
parent.$(parent.frames).bind("myFunction", function (e, value) { localFunction(value); });

如果我从B.com/index加载page1和page2,这很有效,但是从A.com加载错误时失败

  

不安全的JavaScript尝试从帧访问URL A.com的框架   使用URL B.com/page2。域,协议和端口必须匹配。

错误由绑定功能触发。 正如在链接主题中已经说明的那样,我可以使用代码从iframe到同一页面中的其他iframe:

parent.frames['page2'].myFunction(args);

但我仍然从javascript控制台 AND 得到同样的错误:

  

未捕获的TypeError:无法调用未定义的方法'myFunction'

我怎么能摆脱这个?谢谢!

1 个答案:

答案 0 :(得分:0)

使用来自Henrik的建议使用window.postMessage函数解决了! 我首先要将Bessage邮件发送到A.com,然后将A.com postMessage发送到B.com/page1:D 它适用于最新的chrome,opera,firefox,即10,ie9,ie8,ie7没有任何问题:)

B.com/page2发送消息:

parent.postMessage("go!!!!!", $('#parentPage').val());

(我有一个父页面在一个名为“parentPage”的隐藏div中写入它的ip) 然后父页面通过

获取事件
var eventMethod = window.addEventListener ? "addEventListener" : "attachEvent";
var eventer = window[eventMethod];
var messageEvent = eventMethod == "attachEvent" ? "onmessage" : "message";
eventer(messageEvent, function (e) {
        //triggered code here
}, false);

并使用此

重新发送消息
win.postMessage(
                "go",
                targetPage);

B.com/page1接收消息:

window.onmessage = function (e) { /* code here */ }

希望它有用:)

相关问题