访问主站点时SoundCloud小部件翻倍(可能的https问题)

时间:2014-07-13 21:31:30

标签: javascript https soundcloud

我将SoundCloud播放器小部件集成到网站中。我希望当用户点击"查看跟踪"播放器停止播放列表中的一首歌旁边的链接。它没有这样做,SoundCloud网站上的播放器开始播放我网站上的播放器。

我唯一提示是在我的控制台中显示此消息

 Uncaught SecurityError: Blocked a frame with origin "https://w.soundcloud.com" from accessing a frame with origin "http://localhost".  The frame requesting access has a protocol of "https", the frame being accessed has a protocol of "http". Protocols must match.

我缺少https是否可能导致某些问题?

修改

我已尝试删除所有其他JavaScript,问题仍然存在。事实上它甚至发生在一个完全空白的html文件中,只有iframe。 这是为我产生问题的最小代码(减去API令牌)。

<html>
<head>
    <title></title>
</head>
<body>
<iframe width="100%" height="100%" scrolling="no" frameborder="no" src="//w.soundcloud.com/player/?url=https%3A//api.soundcloud.com/playlists/bleh%3Fsecret_token%3Ds-blah&amp;show_comments=true&amp;color=ff0000&amp;theme_color=91d0d6&amp;show_artwork=false&amp;auto_play=false"></iframe>
</body>
</html>

编辑2

Here's a jsbin为我产生了这种行为。如果我没有在另一个标签中打开SoundCloud,似乎只会发生这种情况。

1 个答案:

答案 0 :(得分:2)

是否仅在本地计算机上发生? 你能否在jsbin.com或类似的东西上为我们提供一个孤立的测试用例?

我试图在localhost和jsbin上重现它,并且没有抛出任何错误。

无论如何,我猜这与浏览器放置window.postMessage方法的限制有关,以防止XSS攻击。

我们在Widget API中使用window.postMessage(用于设置窗口小部件iframe和父页面之间的通信),我刚刚添加了一个修复程序,使这部分代码更具防御性,因此不会发送任何消息父窗口,如果我们无法访问它。

它将在今天结束时生效。