2011-09-06 1 views
9

Mam stronę z ramką iframe i skryptem JavaScript z elementu iframe, która umożliwia dostęp do funkcji ramki nadrzędnej. Strony są na tym samym serwerze (nie jest to skrypty cross-domain), nie mam żadnego problemu z FF i IE, ale kiedy używam go w Chrome, mam poniższy komunikat.Niebezpieczna próba dostępu do ramki przy użyciu adresu URL

Niebezpieczne JavaScript próba dostępu ramkę z adresem URL http://samedomain:51700/irj/servlet/prt/portal/prtroot/CRMApp73.StoricoApp z ramą z URL http://samedomain:51700/irj/servlet/prt/portal/prtroot/CRMApp73.CRMOProxy. Domeny, protokoły i porty muszą być zgodne.

Jak mogę rozwiązać ten problem? Szukam przez google od 4 godzin. Mam nadzieję, że ktoś mi pomoże.

EDIT: Kod

To JavaScript na stronie iframe. Ten JavaScript wywołuje funkcję JavaScript ramki macierzystej "setUfficioPostale". To jest punkt, w którym Chrome daje mi błąd "Niebezpieczny dostęp ...".

<script> 
    window.parent.setUfficioPostale(map); 
</script> 

To jest JavaScript w ramce nadrzędnej do przesyłania formularzy. Ma to na celu wysłanie ukrytego formularza z ukrytymi parametrami do strony załadowanej w ramce iframe.

function onAltroUfficioClick(){ 
    document.getElementById("hiddenParams").submit(); 
    $('#framePosteMaps').show(); 
} 

To jest definicja elementu iframe na stronie nadrzędnej.

<iframe id="framePosteMaps" scrolling="no" name="framePosteMaps"></iframe> 

Jest to formularz z atrybutem celu do wysyłania parametrów do strony iframe.

<form id="hiddenParams" target="framePosteMaps" action="http://samedomain:51700/irj/servlet/prt/portal/prtroot/TestFrameRC.SimPerProxy" method="POST"> 
    <input type="hidden" name="distanza" value="10"> 
    <input type="hidden" name="cliente" value="Retail"> 
    .................... 
</form> 
+0

Czy możesz pokazać nam kod? – UpHelix

+0

Chociaż brzmi to tak, jak nie powinno być konieczne, być może ustawienie "document.domain" w elemencie nadrzędnym i elemencie iframe na tę samą wartość spowoduje jego uruchomienie? –

+0

uwaga: jeśli twoje samedomain to 'foo.somedomain.com' i' bar.somedomain.com', to one nie są takie same. – c69

Odpowiedz

2

Chrome nie pozwala na to. Kod z elementu iframe nie może uzyskać dostępu do kodu nadrzędnego.

2

Po pierwsze, sprawdź, czy obie strony są odniesione przy użyciu attr SRC iframe w dokładnie taki sam sposób, to znaczy:

http://samedomain:51700/irj/ 
http://samedomain:51700/irj/ 

beacause to jest możliwe, że nawet jeśli są one uruchomione w tym samym maszyna, jedna z tych iFrames nazywa się tak:

http://localhost:51700/irj/ 

a drugi:

http://MachineId:51700/irj/ 

lub jakąkolwiek inną kombinację.

Można to sprawdzić, sprawdzając kod za pomocą narzędzi dla programistów we wszystkich nowoczesnych przeglądarkach.

Chrome pozwala na wywołanie funkcji rodzica, jeśli są one w tej samej domenie (robię to codziennie), więc nie powinno być żadnych problemów.

mogę używać tej funkcji do acces dzieci iFrames:

var getIframe = function (id) { 
    if ($.browser.mozilla) return document.getElementById(id).contentWindow; 
    return window.frames[id]; 
}; 

i po prostu "parent.yourParentFunction()", gdy chcesz uzyskać dostęp do funkcji w jednostce dominującej.

Sprawdź, czy funkcja rodzica jest przypisany do obiektu window (globalnej przestrzeni nazw)

Powodzenia z tym :-)

+3

Wystarczy mała uwaga: nie jest dobrą praktyką testowanie typu/wersji przeglądarki. Zamiast tego sprawdź dostępność funkcji! –

1

Rama rodzic mógł ustawić wartość document.domain różny od „sameDomain” . Zaktualizuj właściwość document.domain w elemencie iframe js do wartości ustawionej w ramce nadrzędnej i powinna działać.

+2

Proszę podać przykładowy kod w swojej odpowiedzi. –