1

大家好,我有跨域的问题。

我有 1 台服务器(example.com),其中有:

index.html 作为主页,indexIFrame.html 作为 index.xhtml 中的框架

Index.html 从静态服务器加载大量 javascript 文件(例如 staticServer:8090/myScript.js)

indexIFrame.html 还从另一个静态服务器(anotherServer:8070/myOtherScript.js)加载它自己的 javascript 文件

所以在 myOtherScript.js 我这样做:

parent.MyMainClass.showPopup();

MyMainClass 类在 staticServer 的 js 文件中声明(此文件可用于 index.xhtml)

当我运行代码时,我得到:

Unsafe JavaScript attempt to access frame with URL http://example:8080/myapp/myList.xhtml from frame with URL http://example:8080/myapp/myListIFrame.xhtml Domains, protocols and ports must match.

myList 和 myListIframe 它们位于同一服务器中,只是 javascript 资源位于不同的域中。

所以我不确定如何使这项工作。有任何想法吗?

4

2 回答 2

1

现代浏览器根本不允许这样做。首选技术是改用https://developer.mozilla.org/en-US/docs/DOM/window.postMessage

...但是你会发现,像往常一样,IE 是在它自己的小世界里,不支持那个标准。我知道有一些框架可以提供跨浏览器解决方案,但我不能特别推荐其中任何一个。

这是一个跨浏览器监听器:

if (typeof(window.postMessage) != 'undefined') {
    if (typeof(window.addEventListener) != 'undefined') {
        window.addEventListener("message", function(event) {
            doSomething(event.data);
        }, false);
    } else {
        window.attachEvent('onmessage', function(e) {
            doSomething(e.data);
        });
    }
}​

...和一个发件人...

if (typeof(window.postMessage) != 'undefined') {
    //modern browsers...
    window.top.postMessage('my data', '*');
} else {
    //older browsers - just access window.top
}
于 2012-09-26T17:31:03.797 回答
0

尝试在服务器上创建一些别名。

比如:http://example:8080/myapp/myScript.js导致staticServer:8090/myScript.js等等。

这可能会欺骗 javascript,因为它应该认为这些 JS 文件确实在您的服务器上。

于 2012-09-26T17:39:05.380 回答