我很抱歉,因为我对我的问题感到非常困惑。我真的陷入困境,因为这导致我的生产站点出现问题。
我的网站上有一个 javascript 播放器,它可以播放可以托管在 youtube、soundcloud 或 vimeo 上的歌曲列表。昨天我注意到这个错误,通常在您尝试通过播放器按钮“跳过”加载新歌曲时出现。这个错误在最后一两天才开始。我在 youtube api 发行说明中没有看到任何新内容,并且使用 Chrome、Firefox 和 Safari 时会发生此错误,因此很可能与浏览器的更改无关。我使用的东西已经改变了,因为我在 18 天内没有推送新代码。
一个示例播放列表在这里: http: //www.muusical.com/playlists/programming-music
我想我已经隔离了重现错误的方法,以下是步骤:
- 播放 youtube 托管的歌曲。
- 跳到列表中的任何其他歌曲(无论是按跳过按钮还是直接按歌曲行项目上的播放按钮)。
*请注意,如果播放列表中的第一首歌曲是 youtube 歌曲,即使不播放最初加载的 youtube 歌曲,直接跳到另一首歌曲也会产生错误。
从本质上讲,一旦您加载和/或播放了一首 youtube 歌曲并尝试跳到另一首歌曲,该错误似乎就会发生。
如果您发现此行为的例外情况,请告诉我。
我在控制台中看到了这个错误:
Failed to execute 'postMessage' on 'DOMWindow': The target origin provided ('https://www.muusical.com') does not match the recipient window's origin ('http://www.muusical.com').
我使用 youtube javascript api 加载播放器:
new YT.Player('playlist-player', {
playerVars: { 'autoplay': 1, 'fs': 0 },
videoId: "gJ6APKIjFQY",
events: {
'onReady': @initPlayerControls,
'onStateChange': @onPlayerStateChange
}
})
这会产生这个 iframe:
<iframe id="playlist-player" frameborder="0" allowfullscreen="1" title="YouTube video player" width="640" height="360" src="https://www.youtube.com/embed/gJ6APKIjFQY?autoplay=1&enablejsapi=1&origin=http%3A%2F%2Fwww.muusical.com"></iframe>
从上面的 youtube 歌曲中点击跳过后,这是我在 iframe 中看到的加载内容:
<iframe id="playlist-player" frameborder="0" allowfullscreen="1" title="YouTube video player" width="640" height="360" src=""></iframe>
我支持 youtube、soundcloud 和 vimeo 歌曲。似乎一旦加载了 youtube 歌曲,“来源”就会从 http 更改为 https。我认为没有必要包含其他主机的嵌入方法,因为即使整个播放列表只是 youtube 并且它不会出现在仅包含来自 soundcloud 和 vimeo 的歌曲的播放列表中,也会发生此错误。
此外,这就是我加载 youtube javascript 的方式:
// Load the IFrame Player API code asynchronously.
var tag = document.createElement('script');
tag.src = "https://www.youtube.com/player_api";
var firstScriptTag = document.getElementsByTagName('script')[0];
firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);
如果您需要我澄清任何事情,请告诉我,并提前感谢您查看。