【问题标题】:Youtube video autoplay on iPhone's Safari or UIWebViewYoutube 视频在 iPhone 的 Safari 或 UIWebView 上自动播放
【发布时间】:2011-03-01 22:36:59
【问题描述】:

是否可以让 youtube 视频在 Safari 和/或 UIWebView 上自动播放?我在 iPhone 应用程序中看到过此操作,tableview 显示没有 Youtube 预览图标的单元格(虽然很确定它是 UIWebView),当您点击单元格时,它会直接转到视频。

这可以通过假装点击 youtube 视频来完成吗?如果是这样,怎么做? getElementById().click 会起作用吗?

【问题讨论】:

    标签: javascript iphone uiwebview


    【解决方案1】:

    诀窍是在 webview 中找到按钮。使用下面的 sn-p。

    - (void)loadWebUIViewWithYoutubeLink {
        webView.delegate = self;
        NSString *htmlString = [NSString stringWithFormat:[NSString
                                 stringWithContentsOfFile:[[NSBundle mainBundle]
            pathForResource:@"YouTubeTemplate" ofType:@"txt"]],
                                 @"b85hn8rJvgw",  @"b85hn8rJvgw", nil];
        [webView loadHTMLString:htmlString baseURL:[NSURL URLWithString:@"http://youtube.com"]];
    }
    
    - (UIButton *)findButtonInView:(UIView *)view {
        UIButton *button = nil;
    
        if ([view isMemberOfClass:[UIButton class]]) {
            return (UIButton *)view;
        }
    
        if (view.subviews && [view.subviews count] > 0) {
            for (UIView *subview in view.subviews) {
                button = [self findButtonInView:subview];
                if (button) return button;
            }
        }
    
        return button;
    }
    
    - (void)webViewDidFinishLoad:(UIWebView *)_webView {
        UIButton *b = [self findButtonInView:_webView];
        [b sendActionsForControlEvents:UIControlEventTouchUpInside];
    }
    

    【讨论】:

    • 适合我的模板:NSString template = @" "; NSString html = [NSString stringWithFormat:template, feedURL, 480.0, 289.0];
    • 整个第二个 if 语句是不必要的 - 对 nil 或 0 对象数组进行快速枚举是完全安全的。没有第二个 if 语句,代码在逻辑上是等价的。
    【解决方案2】:

    如果您创建自己的使用 iframe 的 html 文件,然后将 webview 加载到该文件,那么您只需输入命令即可

    webView.mediaPlaybackRequiresUserAction=FALSE; 
    

    只要您的 youtube 视频在 html 中已经开始播放,视频就会自动播放。可以在以下页面的源代码中找到该 html 文件。 查看源:http://tylerbiscoe.com/vb/iphone_player.html。如果您将其复制并粘贴到浏览器中,您可以看到 iframe 页面的外观。然后使用 webView 加载您的 YouTube 页面,然后使用上面的命令获取被 ios 调用的 quicktime 播放器,以便在 webview 加载完成后自动播放。上面的页面已经包含了三个视频,并且所有三个视频都将连续播放。

    【讨论】:

      【解决方案3】:

      是的,它可以工作(这里的所有 cmets),但你必须使用 youtube old embed src。

      像这样:

      http://www.youtube.com/v/%@?version=3&hl=en_US

      其中 %@ 是 youtube 视频 ID。

      【讨论】:

        【解决方案4】:

        我使用了 Saurabh 的方法,但我没有加载 HTML 字符串,而是加载了一个正常的请求,视频仍然自动播放。

        请务必在关闭 web 视图时将代理设置为 nil,否则它将继续尝试播放。

        - (void)loadVideo
        {
                NSURLRequest *videoReq = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.youtube.com/watch?v=J-30wYSsFUY&feature=plcp"]];
                [_videoWebView setDelegate:self];
                [_videoWebView loadRequest:videoReq];
        }
        

        // -----这两个函数取自 Saurabh Wadhwa 的答案------

        - (UIButton *)findButtonInView:(UIView *)view {
            UIButton *button = nil;
        
            if ([view isMemberOfClass:[UIButton class]]) {
                return (UIButton *)view;
            }
        
            if (view.subviews && [view.subviews count] > 0) {
                for (UIView *subview in view.subviews) {
                    button = [self findButtonInView:subview];
                    if (button) return button;
                }
            }
        
            return button;
        }
        
        - (void)webViewDidFinishLoad:(UIWebView *)_webView {
            UIButton *b = [self findButtonInView:_webView];
            [b sendActionsForControlEvents:UIControlEventTouchUpInside];
        }
        

        【讨论】:

          【解决方案5】:

          上面提到的“按钮单击”方法在 iOS6 中对我有用,但只是第一次。重复加载后,它不会启动视频。在所有条件相同的情况下,我认为这一定是缓存问题或 cookie。原来清除 youtube 的 cookie 使它对我有用。

          for(NSHTTPCookie *cookie in [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookies]) {
                NSLog([cookie domain]);
                if([[cookie domain] isEqualToString:@".youtube.com"]) {
          
                    [[NSHTTPCookieStorage sharedHTTPCookieStorage] deleteCookie:cookie];
                }
          }
          

          希望这可以帮助其他试图为 iOS6 解决这个问题的人!

          【讨论】:

            猜你喜欢
            • 2011-10-09
            • 2012-05-10
            • 2012-03-17
            • 2013-03-26
            • 2013-03-21
            • 2018-01-25
            • 2015-11-08
            • 2018-12-17
            • 2017-10-17
            相关资源
            最近更新 更多