我将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&show_comments=true&color=ff0000&theme_color=91d0d6&show_artwork=false&auto_play=false"></iframe>
</body>
</html>
编辑2
Here's a jsbin为我产生了这种行为。如果我没有在另一个标签中打开SoundCloud,似乎只会发生这种情况。
答案 0 :(得分:2)
是否仅在本地计算机上发生? 你能否在jsbin.com或类似的东西上为我们提供一个孤立的测试用例?
我试图在localhost和jsbin上重现它,并且没有抛出任何错误。
无论如何,我猜这与浏览器放置window.postMessage
方法的限制有关,以防止XSS攻击。
我们在Widget API中使用window.postMessage
(用于设置窗口小部件iframe和父页面之间的通信),我刚刚添加了一个修复程序,使这部分代码更具防御性,因此不会发送任何消息父窗口,如果我们无法访问它。
它将在今天结束时生效。