(我到处找了找,发现了许多修复和文档,但我发布这个是因为它们还没有对我起作用。)
我有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.41m 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)"

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

最佳答案

雅虎,我发现了问题:我不应该把lbpssoframe作为对象调用。但我不知道为什么。
这是有效的代码:

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

这就是我所拥有的:
LbpSsoFrame.contentWindow.postMessage('hello', '*');

那条线修好了,我就可以传信息了。
我本以为
document.getElementById('LbpSsoFrame')


LbpSsoFrame

用不同的方式来称呼同一件事。有谁能解释一下有什么不同吗?两者都可以调用post消息,但当直接使用对象时,我会收到https/http警告或其他警告。
它现在起作用了,但我还是有点不知所措。

关于javascript - 跨域PostMessage方法失败,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20804164/

10-09 22:33