angularjs - angularjs1.x youtube 视频仅使用 youtube iframe api 播放一次
问题描述
我正在使用 Angular js 1.x 开发一个网站。
我正在使用 youtube iframe API 播放 youtube 视频。
这是我的问题。
第一次进入播放页面时,按视频播放按钮可以看到youtube视频正在播放。
然后回到上一页,重新进入相同的播放页面,我再次按下播放按钮,看到如下错误信息。
“播放时出现问题。(播放 ID:***)点击重试”
当我重复上述步骤时,总是会发生这种情况。但是当我刷新页面时,视频会正常播放。
我通过谷歌搜索研究了这些决议,但没有其他办法接近。恐怕这是一个编程问题。
这是我的代码。
CarDetail.html
<youtube width="743" height="538" videoid="{{item.video_id}}"></youtube>
角-youtube.js
(来自http://blog.oxrud.com/posts/creating-youtube-directive/)
angular.module('YouTubeApp', [])
.constant('YT_event', {
STOP: 0,
PLAY: 1,
PAUSE: 2
})
.directive('youtube', function($window, YT_event, youTubeApiService) {
return {
restrict: "E",
scope: {
height: "@",
width: "@",
videoid: "@"
},
template: '<div></div>',
link: function(scope, element, attrs, $rootScope) {
var len = $('script').filter(function() {
return ($(this).attr('src') == 'https://www.youtube.com/iframe_api');
}).length;
if (len === 0) {
var tag = document.createElement('script');
tag.src = "https://www.youtube.com/iframe_api";
var firstScriptTag = document.getElementsByTagName('script')[0];
firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);
}
var player;
youTubeApiService.onReady(function() {
player = setupPlayer(scope, element);
});
function setupPlayer(scope, element) {
return new YT.Player(element.children()[0], {
playerVars: {
autoplay: 0,
html5: 1,
theme: "light",
modesbranding: 0,
color: "white",
iv_load_policy: 3,
showinfo: 1,
controls: 1
},
height: scope.height,
width: scope.width,
videoId: scope.videoid
});
}
scope.$watch('videoid', function(newValue, oldValue) {
if (newValue == oldValue) {
return;
}
if (typeof player !== "undefined") {
// player.cueVideoById(scope.videoid);
}
});
scope.$watch('height + width', function(newValue, oldValue) {
if (newValue == oldValue) {
return;
}
if (typeof player !== "undefined") {
player.setSize(scope.width, scope.height);
}
});
scope.$on(0, function() {
if (typeof player !== "undefined") {
player.seekTo(0);
player.stopVideo();
}
});
scope.$on(1, function() {
if (typeof player !== "undefined") {
player.playVideo();
}
});
scope.$on(2, function() {
if (typeof player !== "undefined") {
player.pauseVideo();
}
});
}
};
})
.factory("youTubeApiService", function($q, $window) {
var deferred = $q.defer();
var apiReady = deferred.promise;
$window.onYouTubeIframeAPIReady = function() {
deferred.resolve();
};
return {
onReady: function(callback) {
apiReady.then(callback);
}
};
});
加载 angular-youtube.js
angular.module('app')
.constant('JQ_CONFIG', { ...
})
.config(['$ocLazyLoadProvider', function($ocLazyLoadProvider) {
$ocLazyLoadProvider.config({
debug: true,
events: true,
modules: [{
name: 'YouTubeApp',
files: [HOMEPAGE_ROOT + '/webpage/bower_components/angular-youtube/angular-youtube.js']
}]
});
}]);
有没有什么方法可以在每次进入播放页面不刷新的情况下播放视频?
任何帮助,将不胜感激。
谢谢。
解决方案
推荐阅读
- git - Git 从分支签出文件而不更改索引
- java - 以编程方式设置 Spring OAuth2 userInfoUri
- python - 在 Python 中使用 if 语句打印二维数组
- swift - Swift:字符串中的子字符串(整数/数字)
- internet-explorer - 当操作 url 是跨域时,Microsoft 浏览器不会将表单发布到 iframe
- azure - 在 azure 上运行 docker 容器
- eclipse - 将现有工作空间中的项目从 ADT 转换为 Andmore
- microcontroller - 如何使用 SPI 总线对压力传感器进行编程
- c# - 如何一键获取gridcontrol中的所有数据
- .htaccess - 如何使用 htaccess 用连字符分隔两个变量