为啥我的 UIWebView 不显示 Javascript YouTube 播放器 iFrame?
Posted
技术标签:
【中文标题】为啥我的 UIWebView 不显示 Javascript YouTube 播放器 iFrame?【英文标题】:Why won't my UIWebView display a Javascript YouTube player iFrame?为什么我的 UIWebView 不显示 Javascript YouTube 播放器 iFrame? 【发布时间】:2013-08-31 19:50:10 【问题描述】:我使用 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>
令人困惑的部分是脚本在桌面浏览器中运行良好,但在 ios 的 Safari 和 UIWebView 中它不起作用。我认为这是缺少 Adobe Flash Player 的问题,但我认为使用 javascript 创建 iFrame 与使用实际标签相同?当我使用标签时,这确实有效,但该方法不适合我。所以我的问题是,有没有直接使用 Javascript 而不是 iFrames 嵌入 html5 YouTube 播放器?
【问题讨论】:
【参考方案1】:据我了解,您使用的 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/";
【讨论】:
以上是关于为啥我的 UIWebView 不显示 Javascript YouTube 播放器 iFrame?的主要内容,如果未能解决你的问题,请参考以下文章
为啥 iOS UIWebView Video 不发送 cookie?
为啥 UIWebView 不能在 Safari 中打开我的链接?
为啥 UIWebView 不在我的应用程序委托中的 applicationWillTerminate: 处加载 NSURLRequest?
为啥我的视频会在 UIWebView 中立即播放,但需要永远缓冲和加载 MPMoviePlayerController?