2014-04-29 11 views
9

Próbuję uzyskać dostęp do elementu iframe w subdomenie i uzyskać błąd cross-domain.

Oto kod przykład .mojadomena.com/iframe_test.html:Access-Control-Allow-Origin nie działa dla iframe z tą samą domeną

<html> 
<head> 
    <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script> 
</head> 
<body> 
    <iframe src="http://example2.mydomain.com/welcome.php" width="1000" height="600"></iframe> 
    <script> 
     $(document).ready(function() 
     { 
      setTimeout(function(){ 
       $('#innerdiv',$('iframe').contents()).hide(); 
      },5000); 
     }); 
    </script> 
</body> 
</html> 



A oto kod przyklad2 .mojadomena.com/welcome.php:

<?php 
header("Access-Control-Allow-Origin: " . "*"); 
?> 
<html> 
<head> 

</head> 
<body> 
    <div id="innerdiv"> 
     hello 
    </div> 
</body> 
</html> 



. gdy linia $ (. '# innerdiv', $ ('iframe') zawartość()) hide() jest wykonywany, pojawia się następujący błąd:

Uncaught SecurityError: Failed to read the 'contentDocument' property from 'HTMLIFrameElement': Blocked a frame with origin "http://example.mydomain.com" from accessing a frame with origin "http://example2.mydomain.com". Protocols, domains, and ports must match. 


Sprawdziłem Skrzypek że nagłówek Access-Control-Allow-Origin został rzeczywiście zwrócony w odpowiedzi na welcome.php
Czy można uzyskać dostęp do zawartości elementu iframe w subdomenie?

Odpowiedz

15

Access-Control-Allow-Origin jest używany tylko dla XHR.

To, czego potrzebujesz, to Same Origin Policy.

Musisz dodać document.domain = 'example.com' do swoich stron.

+0

Gdzie powinniśmy dodać dokument document.domain? Czy możesz rozwinąć trochę więcej. Dziękuję Ci. –

+0

@SaeedNeamati Musisz dodać je do obu stron w tagu skryptu. Zasadniczo strona główna i strona iframe muszą mieć '' set –

+7

To nie działa, otrzymuję: 'Uncaught SecurityError: Nie można ustawić właściwości 'domain' w 'Document ":" example.com "nie jest przyrostkiem". " –

Powiązane problemy