1

UIWebViewで動画を自動再生して次の動画に自動で行きたいです。YouTube Player を UIWebView に埋め込み、iFrame スニペット用の YouTube Player API をいくつか使用しましたが、うまく機能しませんでした。

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 デリゲートはロードされたイベントを受け取り、次のデリゲート メソッドを呼び出します。

- (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 はうまく機能します。

イベントが発生しないのはなぜですか?

4

1 に答える 1

0

これは古い質問であり、まだ助けが必要かどうかわからないので、簡潔に説明します.

[webView loadHTMLString:baseURL] を使用する代わりに、[webView loadRequest] を使用します。loadRequest メソッドは、参照されている YouTube iframe JavaScript を完全に読み込むことができ、iframe API を操作できます。次に、onReady および onStateChange イベントが発生するのがわかります。また、キュー関数などを呼び出すこともできます。それが質問に答えない場合はお知らせください。

于 2013-02-03T05:04:43.150 に答える