首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >iframes的跨域问题

iframes的跨域问题
EN

Stack Overflow用户
提问于 2012-02-01 04:19:10
回答 1查看 974关注 0票数 5

我知道跨浏览器域调用的解决方案。要么使用JSONP,进行代理调用,要么接受服务器上的域。今天我在我的公司又发现了一种奇怪的方式。

方法:

他们使用以下命令更改主机以匹配第二台服务器的主机-

代码语言:javascript
运行
复制
window.location.host = "xyz.com";
          or
document.domain = "xyz.com";

然后,他们创建一个隐藏的iframe,获取iframe中的内容,并将内容替换为可见元素。

问题:

它可以与iframe一起工作,但是如果我调用ajax,它就不能工作。有什么要说的吗?

EN

Stack Overflow用户

回答已采纳

发布于 2012-02-14 03:10:11

我不是jsonp的粉丝,它创建了数据和表示之间的耦合,所以我以前研究过这个问题,好吧,有一个技巧可以使用,请遵循以下内容:

假设我们有名为A的主窗口和名为B的iframe中的“子”窗口。A和B必须来自同一主机,但可以有不同的子域,如下所示:

sub1.example.com提供

A

B由sub2.example.com提供

浏览器将允许您更改文档的域,但仍会对您进行限制,因此您只能通过删除子域来更改域,直到到达主机为止,因此在A中,您可以更改域,如下所示:

代码语言:javascript
运行
复制
document.domain = "example.com";

在B中,首先对其域(sub2.example.com)进行ajax调用,然后在发送第一个请求后更改域,就像在A中一样,这样两个文档就具有相同的域。由于您向B中的原始域发出了请求,浏览器将允许您继续向其发送请求,但是由于您还更改了它的域,并且现在A和B具有相同的域,因此它们可以相互通信。

在更改域之前,首先在B中向其原始域发出至少一个请求,这一点很重要。而且,如果两个页面都不是来自同一个主机,它就不会工作,所以在大多数情况下,它不能解决问题,但它确实允许您有更多的回旋余地。

我不止一次使用这个技巧,没有遇到任何问题,据我所知,它可以在所有浏览器中工作,如果在某些情况下不能,请告诉我。

下面是一个伪例:

代码语言:javascript
运行
复制
in A
==================
document.domain = "example.com";
var child; // keep reference to B
function setChild(win) {
    childDocument = win;
}

function handleMessage(message) {
    do what ever it is you need to
}

in B
==================
make ajax request
document.domain = "example.com";
parent.setChild(this);

function ajaxCallback(message) {
    parent.handleMessage(message);
}
票数 3
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9086331

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档