2017-08-01 1 views
4

Ich versuche, den Iframe (https://booking.yourdomain.com von https://www.yourdomain.com) Inhalt zu bekommen, damit ich die Höhe darauf einstellen kann. Also der gesamte Inhalt sichtbar ist, so (ich den Ausdruck nahm von here):Erhalten Iframe Inhalt Höhe, wenn Domäne und Protokoll übereinstimmen, aber Subdomäne nicht

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

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

Aber das löst den folgenden Fehler:

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

Domains und Protokoll Spiel, aber Sub-Domain nicht der Fall,

Jeder Vorschlag?

(. Wenn Sie mit de Debugger spielen wollen habe ich ein test.html nur mit dem iframe in der Produktionsumgebung)

-EDIT-

Zur Umgehung des Problems: Jede Idee, wie das Scrollen zu ermöglichen auf dem iframes Inhalt? (feste Höhe und Überlauf Scroll versucht, und scrolling = „ja“, aber wird nicht funktionieren)

+0

Die Domänen nicht „passen“. Die Idee einer "Subdomain" existiert nicht wirklich, soweit es sich um die Herkunftspolitik und die Ursprungsbeschränkungen handelt. Soweit Browser betroffen sind, mit dem, was Sie zu tun ist das Gleiche wie zwei Domänen, die in irgendeiner Weise-'https nicht übereinstimmen: // www.yourdomain.com' vs 'https: //some.completely. other.site.com' – sideshowbarker

+0

Was meinen Sie mit "Scrollen auf dem Iframe-Inhalt aktivieren"? Es scheint mir, dass es standardmäßig aktiviert ist (siehe dieses [jsfiddle] (http://jsfiddle.net/ConnorsFan/5s4u7bz9/), getestet in Chrome, Firefox und IE auf Windows). – ConnorsFan

+0

i Sie überprüfen den Link in der Frage (test.html) Sie werden sehen, dass es nicht mein Fall ist .. –

Antwort

1

Die Same Origin Policy ist der Grund, warum der Browser blockiert wird.

Um das Problem zu umgehen, fügen Sie die folgende Zeile von JS für beide, die Seite, die das iframe enthält, und die Seite, die innerhalb des iframe geladen wird:

document.domain = "yourdomain.com"; 

Weitere Einzelheiten finden Sie https://developer.mozilla.org/en-US/docs/Web/Security/Same-origin_policy#Changing_origin.

Edit: Um die iframe, um die Größe basierend auf deren Inhalt, empfehle ich iframe-resizer.

+0

Wenn Sie den Quellcode meiner test.html überprüfen, mache ich es bereits in meinem Teil. Die anderen Sub-Domain, es ist ein c-Name Records, die ich keinen Zugriff darauf haben .. –

+0

Im Quellcode von https://www.islamallorca.com/booking-test.html sehe ich 'window.domain =‚islamallorca. com '; 'und nicht' document.domain =' islamallorca.com '; '. Bitte versuchen Sie ** Dokument ** .domain. Stellen Sie dann sicher, dass diese Codezeile auch auf der Seite vorhanden ist, die in den Iframe geladen wird. Im Moment fehlt es nach wie vor in der eingebetteten Seite (iframe src, beispielsweise https: //booking.islamallorca.com: 4475/fwbookingresponsivestep/...). – pwagner

+0

In der Tat habe ich einen Fehler gemacht und stattdessen die Eigenschaft auf Fenster gesetzt! Die Sache ist, ich es meinen Code geändert ('booking_iframe.contentWindow.document.body.offsetHeight +‚px‘; // gibt 150px aber der Inhalt ist bigger') noch die iframe Höhe zurückkehren (nicht ihr Inhalt). Irgendeine Idee, wie man es bekommt? Vielen Dank! –

Verwandte Themen