2012-11-19 5 views
5

Próbuję wywołać funkcję SC.Widget z tego małego interfejsu API: http://developers.soundcloud.com/docs/api/html5-widget, ale ten komunikat o błędzie pojawia się w inspektorze przeglądarki Chrome i utknąłem w tym miejscu.Błąd podczas próby uzyskania dostępu do elementu iframe w kodzie JavaScript

Niebezpieczne JavaScript próba dostępu ramkę z adresem URL file://localhost/Users/maxwell/Desktop/test/test.html z ramą withURL

http://w.soundcloud.com/player/?url=http%3A%2F%2Fapi.soundcloud.com%2Ftracks%2F67825032&auto_play=false&show_artwork=true&color=ff7700.

Ramka żądająca dostępu ma protokół "http", ramka oznaczona jako ma dostęp do protokołu "plik". Protokoły muszą się zgadzać.

<body> 
    <iframe id="soundcloud" width="100%" height="166" scrolling="no" frameborder="no" 
    src="http://w.soundcloud.com/player/?url=http%3A%2F%2Fapi.soundcloud.com%2Ftracks%2F67825032&amp;auto_play=false&amp;show_artwork=true&amp;color=ff7700"></iframe> 
    <script> 
     Soundcloud(); 
    </script> 
</body> 


function Soundcloud() { 
    var widget1 = SC.Widget(iframeElement.soundcloud); 
    alert("widget1"); 
} 

wiem, że robi to ze względów bezpieczeństwa, ale w jaki sposób modyfikować widget SoundCloud jeśli nie mogę otworzyć klatkę?

Dziękuję za pomoc!

Odpowiedz

8

Podczas uzyskiwania dostępu do elementu iframe za pomocą JavaScript lub tworzenia dowolnych żądań JSON AJAX, można uzyskać dostęp lub odpowiedź tylko wtedy, gdy są one w tej samej domenie. W przeciwnym wypadku, serwer musi jawnie ustawić:

Access-Control-Allow-Origin: *

w nagłówkach. Możesz także podać rozdzielaną przecinkami listę dozwolonych domen zamiast *.

Musisz przetestować to w środowisku programistycznym, w którym strona internetowa i źródło danych znajdują się w tej samej domenie, na przykład localhost, w przeciwnym razie nie ma nic innego, co można zrobić, chyba że uruchomisz Chrome za pomocą - wyłącz-web-security

+0

@Maxwell SoundCloud musiałby ustawić ten nagłówek. Nie ty. – monokrome

2

można dodać do swojej iframe

sandbox="allow-same-origin allow-scripts" 

nie obsługiwanym w operze choć - nowego elementu z w3schools. Zajmie się tym błędem, ale złamie odtwarzacz.