尝试在JavaScript中访问iframe时出错

时间:2012-11-19 00:22:35

标签: javascript soundcloud

我正在尝试从这个小API调用函数SC.Widget:http://developers.soundcloud.com/docs/api/html5-widget,但是我在Chrome检查器中收到此错误消息,我被困在那里。

  

不安全的JavaScript尝试使用URL访问框架   来自框架with {MY {/ 1>}的file://localhost/Users/maxwell/Desktop/test/test.html      

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

     

请求访问的帧具有“http”协议,帧为   access有一个'file'协议。协议必须匹配。

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

我知道这样做是出于安全原因,但如果我无法访问该框架,如何修改SoundCloud小部件?

感谢您的帮助!

2 个答案:

答案 0 :(得分:8)

使用JavaScript访问iframe或发出任何JSON AJAX请求时,只有当它们位于同一个域时才能获得访问权限或响应。否则,服务器必须明确设置:

Access-Control-Allow-Origin:*

标题中的

。您还可以提供以逗号分隔的允许域列表,而不是*。

因此,您必须在网页和数据源位于同一域的开发环境中进行测试,例如localhost,否则除非您使用--disable启动chrome,否则您无法做任何其他事情。 -web安全

答案 1 :(得分:2)

您可以将其添加到iframe

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

虽然不支持歌剧 - 来自w3schools的新项目。它将处理错误,但它会破坏玩家。