再生終了時に何かする

前回の続編的なものです。

再生&フルスクリーンをプログラムからやったので、終了時も何かやってみよう!です。

javascriptで何かさせる場合は前回の

  [webView stringByEvaluatingJavaScriptFromString:@"var v = document.getElementById('video');v.webkitEnterFullscreen();"];

に少し手を加えて

  [webView stringByEvaluatingJavaScriptFromString:@"var v = document.getElementById('video');v.webkitEnterFullscreen();
    v.addEventListener('ended',function(){var v = document.getElementById('video');v.webkitExitFullScreen();});"];

こんな感じに実装します。
この例の場合、動画の最後まで再生したあとにフルスクリーンを解除するようにしています。

objective-cで何かしたいよ!

という場合、javascriptから直接コールバックする方法はないみたいですが、裏技的にdocument.locationを利用することでそれっぽい動きをさせることが出来ます。

さっきの例を少しいじって

  [webView stringByEvaluatingJavaScriptFromString:@"var v = document.getElementById('video');v.webkitEnterFullscreen();
    v.addEventListener('ended',function(){document.location='hoge:fuga:param1:param2';});"];

とした上で、objective-c側で

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
  
  NSString *requestString = [[request URL] absoluteString];
  NSArray *components = [requestString componentsSeparatedByString:@":"];
  if (1 < [components count] && [[components objectAtIndex:0] isEqualToString:@"hoge"]) {
    if ([[components objectAtIndex:1] isEqualToString:@"fuga"]) {

      NSLog(@"%@", [components objectAtIndex:2]); // param1
      NSLog(@"%@", [components objectAtIndex:3]); // param2 変数を渡すことも出来ます
      
      return NO;
    }
  }
  return YES;
}

でOKです。

  [webView setDelegate:self];

をお忘れなく!!


こっちはここを参考にしました。というかほとんど丸写しですね。
http://www.codingventures.com/2008/12/using-uiwebview-to-render-svg-files/