我有一个根 html 页面 A(比如 foo.com 上的 A.html),其中包含一个 iframe B(比如 bar.com 上的 B.html)。iframe B 包含另一个 iframe C(foobarfoo.com 上的 C.html)。
当用户单击父页面 A 中的某些内容时,我试图通知 iframe C。
由于两个子 iframe(B 和 C)与父 A 位于不同的域中,因此无法访问 iframe 属性或调用脚本。
我可以控制 A.html 和 C.html 中的代码,并且可以使用 html5 postmessaging 选项来发送消息。我尝试将邮件从 A 发送到 B,效果很好,但是直接从 A 发送到 C 是我正在努力解决的问题。
如果我尝试使用 document.parentWindow.frames 访问嵌套的 iframe C,我只会得到 iframe B 而不是 iframe C。这是预期的吗?
如果我首先从 DOM 获取 iframe B,然后尝试使用 getElementByID 获取 iframe C,我会收到拒绝访问错误,这很明显,因为 iframe B 位于不同的域上并且不允许查询其 DOM。
这是我尝试过的两个选项的代码...
选项1
function postMessage1()
{
var message = new Object;
message["MessageId"] = "NewPage";
var messageData = JSON.stringify(message);
var domain = 'http://localhost';
var allFrames = document.parentWindow.frames;
var iframe = allFrames['frameC'];
iframe.postMessage(messageData, domain); -----> iframe is null here as it cannot find any frame with the ID - frameC.
}
选项2
function postMessage2()
{
var message = new Object;
message["MessageId"] = "NewPage";
var messageData = JSON.stringify(message);
var domain = 'http://localhost';
var proxyFrame = document.getElementById("frameB");
var targetFrame = proxyFrame.getElementById("frameC"); ----> Access denied to getElementByID in frame B as it is from a different domain and accessing its DOM is not allowed.
targetFrame.contentWindow.postMessage(messageData, domain);
}
我正在尝试使用 window.postMessage 查找是否有解决方案。任何帮助表示赞赏。