2012-11-19 21 views
5

Sto provando a chiamare la funzione SC.Widget da questa piccola API: http://developers.soundcloud.com/docs/api/html5-widget, ma ricevo questo messaggio di errore in Impostazioni di Chrome e sono bloccato lì.Errore nel tentativo di accedere a un iframe in JavaScript

tentativo Unsafe JavaScript per accedere telaio con URL file://localhost/Users/maxwell/Desktop/test/test.html dal telaio withURL

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

Il frame che richiede l'accesso ha un protocollo di 'http', il frame da cui si accede ha un protocollo di 'file'. I protocolli devono corrispondere.

<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"); 
} 

So che sta facendo questo per motivi di sicurezza, ma come faccio a modificare il widget di SoundCloud se non riesco ad accedere al telaio?

Grazie per l'aiuto!

risposta

8

Quando si accede a un iframe con JavaScript o si effettua una richiesta JSON AJAX, è possibile ottenere accesso o una risposta solo quando si trovano nello stesso dominio. In caso contrario, il server deve esplicitamente impostare:

Access-Control-Allow-Origin: *

nelle intestazioni. Puoi anche fornire un elenco separato da virgole di domini consentiti anziché *.

Quindi è necessario testarlo in un ambiente di sviluppo in cui la pagina Web e l'origine dati si trovano nello stesso dominio, ad esempio localhost, altrimenti non c'è davvero altro che si possa fare a meno che non si avvii chrome con - disable-web-sicurezza

+0

@Maxwell SoundCloud dovrebbe impostare tale intestazione. Non tu. – monokrome

2

Si potrebbe aggiungere questo alla tua iframe

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

non supportato in opera anche se - nuovo elemento da W3Schools. Si prenderà cura dell'errore, ma romperà il giocatore.

Problemi correlati