2017-08-01 25 views
4

我正在尝试获取iframe的(https://booking.yourdomain.comhttps://www.yourdomain.com)内容,因此我可以将其设置为高度。因此,所有的内容是可见的,像这样(我把表情从here):当域名和协议匹配时获取iframe内容的高度,但子域名不是

var booking_iframe = document.querySelector('iframe'); 

booking_iframe.onload = function() { 
    booking_iframe.style.height = booking_iframe.contentWindow.document.body.offsetHeight + 'px'; 
} 

但是,这激发了以下错误:

VM389:1 Uncaught DOMException: Blocked a frame with origin "https://www.yourdomain.com" from accessing a cross-origin frame. 
    at <anonymous>:1:54 

域和协议匹配,但子域名没有,

有什么建议吗?

(如果你想和德调试器玩我创建了一个test.html只有在生产环境中的iframe)

CNC中

作为一种变通方法: 任何想法如何使滚动在iframe的内容上? (试过固定的高度和溢出滚动和滚动=“是”,但将无法正常工作)

+0

域名不匹配。就同​​源策略和跨源限制而言,“子域”的概念并不存在。就浏览器而言,您所处理的内容与两个不匹配的域完全相同 - “https://www.yourdomain.com”vs“https://some.compreviously”。 other.site.com' – sideshowbarker

+0

你是什么意思“启用iframe的内容滚动”?在我看来,它是默认启用的(见[jsfiddle](http://jsfiddle.net/ConnorsFan/5s4u7bz9/);在Windows,Chrome和Firefox中测试)。 – ConnorsFan

+0

我检查问题(test.html)中的链接,你会发现它不是我的情况。 –

回答

1

相同的起源的原因,为什么浏览器阻止。

为了规避这个问题,加上JS的下面一行到两个,包含的iframe页面,即在iframe中加载页面:

document.domain = "yourdomain.com"; 

有关详细信息,请参阅https://developer.mozilla.org/en-US/docs/Web/Security/Same-origin_policy#Changing_origin

编辑:为了根据其内容调整iframe的大小,我推荐iframe-resizer

+0

如果你检查我的test.html的源代码,我已经在做我的部分。另一个子域它是一个c-name记录,我无法访问它.. –

+0

在https://www.islamallorca.com/booking-test.html的源代码中,我看到'window.domain ='islamallorca。 com';'而不是'document.domain ='islamallorca.com';'。请尝试**文档**。域。 然后确保这行代码也存在于加载到iframe中的页面中。目前,它在嵌入式页面(iframe src,例如https://booking.islamallorca.com:4475/fwbookingresponsivestep/...)中仍然缺失。 – pwagner

+0

确实,我犯了一个错误,并将属性设置为窗口!事情是我改变了我的代码('booking_iframe.contentWindow.document.body.offsetHeight +'px'; //返回150px,但内容更大')仍然返回iframe高度(不是它的内容)。任何想法如何得到它?谢谢! –