跨域发布消息方法失败



我已经查看了很多修复程序和文档,但我发布这个是因为它们都还没有为我工作。

我有 2 个 MVC4 站点正在开发中。 SSO(即HTTPS)和视频(即HTTP)
(现在都是本地主机)

视频加载一个页面,其中 IFRAME 指向 SSO 上的页面。 它正确加载页面。

SSO页面有这样的javascript:

window.onmessage = function (e) {
    if (e.data == 'hello') {
        alert('It works!');
    }
};

视频页面有以下代码:

<iframe frameborder="0" width="100px" height="100px" id="LbpSsoFrame" src="https://localhost:44301/Sso/InFrame"></iframe>

页面加载完成后,我使用 chrome 的控制台(Chrome V32.0.1700.41 m Aura)并调用以下代码行:

LbpSsoFrame.contentWindow.postMessage('hello', '*');

我收到此错误:

code: 18
message: "Blocked a frame with origin "http://localhost:46086" from accessing a cross-origin frame."
name: "SecurityError"
stack: "Error: Blocked a frame with origin "http://localhost:46086" from accessing a cross-origin frame.↵    at <anonymous>:2:12↵    at Object.InjectedScript._evaluateOn (<anonymous>:603:39)↵    at Object.InjectedScript._evaluateAndWrap (<anonymous>:562:52)↵    at Object.InjectedScript.evaluate (<anonymous>:481:21)"

站在一堵砖墙前,希望别人能知道我做错了什么,或者还需要做什么。 谢谢。

Yahoo,我发现了这个问题:我不应该调用LbpSsoFrame作为对象。 我不知道为什么。

这是有效的代码:

document.getElementById('LbpSsoFrame').contentWindow.postMessage('hello', '*');

这是我所拥有的:

LbpSsoFrame.contentWindow.postMessage('hello', '*');

修复该行后,我正在传递消息。

我会认为

document.getElementById('LbpSsoFrame')

LbpSsoFrame

是称呼同一事物的不同方式。 谁能向我解释一下有什么区别? 两者都可以调用帖子消息,但是在直接使用该对象时,我会收到HTTP/HTTP警告或其他警告。

它现在有效,但我仍然有点迷茫为什么。

最新更新