我在 PhoneJS 单页移动应用程序中嵌入 YouTube 视频时遇到了这个问题。在 PhoneJS 中,JS 脚本定义在不同的文件中。所以我像这样定义了 HTML div:
<div id="player"></div>
现在在 JS 文件中,我这样做了:
function getVideo() {
var tag = document.createElement('script');
tag.src = "https://www.youtube.com/iframe_api";
var playerDiv = document.getElementById('player');
var firstScriptTag = document.getElementsByTagName('script')[0];
firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);
var player;
function onYouTubeIframeAPIReady() {
player = new YT.Player(playerDiv, {
height: '250',
width: '444',
videoId: sIFYPQjYhv8
});
}
}
当我运行并查看调试器时,会调用 Youtube 并收到响应,但它不会显示在视图上。
好的,因为我使用的是 KnockoutJS 绑定,所以我修改了 html 视图中的 div,如下所示:
<iframe id="player" type="text/html" width="444" height="250" frameborder="0" data-bind="attr: { src: src }"></iframe>
然后传入 src 视频 ID:
src: ko.observable('http://www.youtube.com/embed/' + sIFYPQjYhv8 + '?autoplay=1')
然而,在这种情况下,在调试器中,甚至不会对 Youtube 进行调用。什么都没有发生。实际上我更喜欢使用 API 调用而不是第二种方法。
关于如何使第一种方法起作用的任何建议?我的意思是使用 API 调用?
编辑只想提一下,当我在视图中添加下面的代码时,视频就可以流式传输了。
<h1>Video</h1>
<div id="player"></div>
<script>
var tag = document.createElement('script');
tag.src = "https://www.youtube.com/iframe_api";
var playerDiv = document.getElementById('player');
var firstScriptTag = document.getElementsByTagName('script')[0];
firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);
var player;
function onYouTubeIframeAPIReady() {
player = new YT.Player(playerDiv, {
height: '250',
width: '444',
videoId: 'sIFYPQjYhv8'
});
}
</script>