YouTube播放器的活动在UIWebView上无效

时间:2012-11-25 04:45:43

标签: ios uiwebview youtube

我想自动播放电影并在UIWebView上自动播放下一部电影。我在UIWebView上嵌入了YouTube播放器并使用了一些YouTube Player API for iFrame代码段,但它们效果不佳。

HTML在下面。

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<style type="text/css">
    body {
        background-color: #000;
        margin: 0;
    }
</style>
</head>
<body>
<div id="player"></div>

<script>
  var tag = document.createElement("script");
  tag.src = "http://www.youtube.com/iframe_api";
  var firstScriptTag = document.getElementsByTagName("script")[0];
  firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);

  var player;
  function onYouTubeIframeAPIReady() {
    player = new YT.Player("player", {
      height: "390",
      width: "640",
      videoId: "UqFvrjhbO8c",
      events: {
        "onReady": onPlayerReady,
        "onStateChange": onPlayerStateChange
      }
    });
  }

  function onPlayerReady(event) {
    event.target.playVideo();
  }

  function onPlayerStateChange(event) {
    if (event.data == YT.PlayerState.ENDED) {
      document.location = "api://didEndedMovie";
    }
  }
</script>
</body>
</html>

当电影结束时,我希望webview加载api://didEndedMovie。然后,WebView委托将接收加载的事件,并将调用bellow delegate方法。

- (void)viewDidLoad
{
[super viewDidLoad];

if (!_htmlTemplate) {
    NSString *path = [[NSBundle mainBundle] pathForResource:@"YouTubePlayer" ofType:@"html"];
    _htmlTemplate = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];
}
NSString *htmlString = [NSString stringWithFormat:_htmlTemplate];
[self.webView loadHTMLString:htmlString baseURL:nil];
}

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
NSString *requestString = [[request URL] absoluteString];

// if delegate received requests like "api://*", this view controller
// will not move to other views.  

if ([requestString rangeOfString:@"api://"].location == NSNotFound) {
    return YES;
}

// called when the movie ended
if ([requestString isEqualToString:@"api://didEndedMovie"]) {
    NSLog(@"didEndedMovie");
}

return NO;
}

但是,javascript不起作用......事件onReadyonStateChange未被触发。

在浏览器上,这个javascript运行良好。

为什么事件没有被解雇?

1 个答案:

答案 0 :(得分:0)

这是一个较老的问题,我不知道你是否还需要帮助,所以我会简洁明了。

使用[webView loadRequest]而不是[webView loadHTMLString:baseURL]。 loadRequest方法能够完全加载引用的YouTube iframe javascript,并且您可以与iframe api进行交互。然后你会看到onReady和onStateChange事件触发。您还可以调用提示功能和其他内容。如果这不能回答这个问题,请告诉我。