我使用storyboard对象和此代码在Objective-C中创建了一个UIWebView。
[videoView setDelegate:self];
NSString *preURL = @"http://example.com/videoscript.php";
NSString *fullURL = [preURL stringByAddingPercentEscapesUsingEncoding: NSUTF8StringEncoding];
NSURL *url = [NSURL URLWithString:fullURL];
NSURLRequest *requestObj = [NSURLRequest requestWithURL:url];
[videoView loadRequest:requestObj];
WebView打开包含此内容的链接
<head>
<script src="http://www.youtube.com/player_api?enablejsapi=1&version=3"></script>
<script language="javascript">
//Load player api asynchronously.
//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 done = false;
//var player;
function onYouTubeIframeAPIReady() {
player = new YT.Player('player', {
height: '100%',
width: '100%',
videoId: 'JW5meKfy3fY',
events: {
'onReady': onPlayerReady,
'onStateChange': onPlayerStateChange
},
playerVars: {
'controls': '0',
'showinfo': '0',
'showsearch': '0',
'loop': '1',
'embedjsapi': '1',
'qutoplay': '1'
}
});
}
function onPlayerReady(evt) {
evt.target.playVideo();
}
function onPlayerStateChange(evt) {
}
function stopVideo() {
player.stopVideo();
}
</script>
</head>
令人困惑的部分是脚本在桌面浏览器中运行良好,但在Safari for iOS和UIWebView中它不起作用。我认为这是缺乏Adobe Flash Player问题,但我认为使用javascript创建iFrame与使用实际标签相同?当我使用标签时,这确实有效,但该方法对我来说不是一个选择。所以我的问题是,无论如何使用Javascript而不是iFrame直接嵌入HTML5 YouTube播放器?
答案 0 :(得分:0)
据我了解,您使用的API确实需要Flash Player,因此无法在iOS上运行。在“要求”下,它说:
最终用户必须安装Flash Player 10.1或更高版本才能正确查看所有内容。由于这个要求,我们建议使用SWFObject嵌入SWF并检测用户的Flash Player版本。
请注意,iFrame只是嵌入了另一个文档,并不一定意味着该文档是什么 - 它仍然可以是嵌入的Flash Player。
如果您希望轻松绕过Flash Player问题,以下JavaScript肯定可以在UIWebView中使用。但它不会为播放器提供相同级别的自定义。
var iframe = $("<iframe>");
iframe.attr({
width: "100%",
frameborder: 0,
src: "//www.youtube.com/embed/JW5meKfy3fY"
});
// Or, append directly to body.
$("#viewport").append(iframe);
只需将iOS应用中的此行切换到demo url即可进行测试。
NSString *preURL = @"http://jsfiddle.net/KrshC/1/embedded/result/";