2013-03-20 18 views
5

Tôi đang cố gắng tương tác với một trang được tải trong một UIWebView mà không cần chạm vào màn hình. Tôi đã thử mediaplaybackrequiresuseraction không thành công. Tôi cũng đã thử các phương pháp cung cấp here, nhưng dường như nó không hoạt động trong ios 6. Tôi đang cố gắng để tải địa chỉ this và làm cho người chơi bắt đầu chơi. Có ai biết làm thế nào để làm cho công việc này ios 6? Bất kỳ trợ giúp nào cũng được đánh giá rất cao.Có thể tương tác với UIWebView mà không cần chạm không?

MY MÃ

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 


    int storyIndex = [indexPath indexAtPosition: [indexPath length] - 1]; 

    NSString * storyLink = [[stories objectAtIndex: storyIndex] objectForKey: @"link"]; 
    //storyLink is various form of http://link.brightcove.com/services/player/bcpid1683318714001?bckey=AQ~~,AAAAC59qSJk~,vyxcsD3OtBPHZ2UIrFX2-wdCLTYNyMNn&bclid=1644543007001&bctid=2238216269001 with different bctid=value 

    NSURL *kitcoURL = [NSURL URLWithString:storyLink]; 
    NSURLRequest *requestURL = [NSURLRequest requestWithURL:kitcoURL]; 
    [videoScreen setUserInteractionEnabled:YES]; 
    [videoScreen setMediaPlaybackRequiresUserAction:NO]; 
    [videoScreen loadRequest:requestURL]; 

} 

// Phương pháp không làm việc trong iOS6

- (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]; 
} 

EDIT // videoScreen là UIWebView tôi

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 

NSString *urlString = @"http://link.brightcove.com/services/player/bcpid1683318714001?bckey=AQ~~,AAAAC59qSJk~,vyxcsD3OtBPHZ2UIrFX2-wdCLTYNyMNn&bclid=1644543007001&bctid=2238216269001"; 

NSError *error; 
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"bckey=([^&]*)" options:0 error:&error]; 
NSTextCheckingResult *match = [regex firstMatchInString:urlString options:0 range:NSMakeRange(0, urlString.length)]; 
NSString *bckey = [urlString substringWithRange:[match rangeAtIndex:1]]; 

regex = [NSRegularExpression regularExpressionWithPattern:@"bctid=([0-9]*)" options:0 error:&error]; 
match = [regex firstMatchInString:urlString options:0 range:NSMakeRange(0, urlString.length)]; 
NSString *bctid = [urlString substringWithRange:[match rangeAtIndex:1]]; 

NSString *newUrlString = [NSString stringWithFormat:@"http://c.brightcove.com/services/viewer/htmlFederated?&playerKey=%@&videoID=%@", bckey, bctid]; 

[videoScreen loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:newUrlString]]]; 

} 

- (void)webViewDidFinishLoad:(UIWebView *)webView 
{ 
if (!webView.isLoading) 
{ 
    [self checkForVideoReady]; 
} 

} 
// Checking player object for ready. If it ready - starting video. Otherwise waiting 1 second 
- (void)checkForVideoReady 
{ 
    if (![[videoScreen stringByEvaluatingJavaScriptFromString:@"player.ready"] isEqualToString:@"true"]) 
    { 
    [self performSelector:@selector(checkForVideoReady) withObject:nil afterDelay:1]; 
    } 
    else 
    { 
     [videoScreen stringByEvaluatingJavaScriptFromString:@"player.videoPlayer.playButton.element.click();"]; 
    } 
} 
+0

Đây không phải là chính xác thuộc tính 'mediaPlaybackRequiresUserAction' trên' UIWebView' là gì? –

+0

mediaPlaybackRequiresUserAction gây ra sự cố do bộ chọn không được nhận dạng. Vui lòng kiểm tra chỉnh sửa. –

+0

Vâng, bạn sẽ phải sử dụng 'setMediaPlaybackRequiresUserAction: NO'. videoScreen cũng phải là 'UIWebView'. –

Trả lời

1

Phương pháp tìm nút tìm trong chế độ xem dựa trên video HTML 5 HTML.
Tôi đã tìm thấy giải pháp cho vấn đề của bạn, nó không thanh lịch, nhưng hoạt động.

Liên kết của bạn

http://link.brightcove.com/services/player/bcpid1683318714001?bckey=AQ~~,AAAAC59qSJk~,vyxcsD3OtBPHZ2UIrFX2-wdCLTYNyMNn&bclid=1644543007001&bctid=2238216269001

trang tải với đối tượng flash. Và theo như tôi biết không có cách nào để bắt đầu chơi nó bằng cách sử dụng JS hoặc UIWebView.
Sau khi nghiên cứu yêu cầu tôi thấy rằng UIWebView truy vấn cho url khác:

http://c.brightcove.com/services/viewer/htmlFederated?&width=966&height=546&flashID=myExperience&bgcolor=%23FFFFFF&playerID=1683318714001&playerKey=AQ~~%2CAAAAC59qSJk~%2CvyxcsD3OtBPHZ2UIrFX2-wdCLTYNyMNn&isVid=true&isUI=true&dynamicStreaming=true&autoStart=true&debuggerID=&videoID=2238216269001&%40videoPlayer=2238216269001&lineupID=1644543007001&startTime=1364279975091&refURL=not%20available&%40videoPlayer=2238216269001

Điều thứ hai là thú vị hơn, bởi vì chúng ta có thể truy cập vào player biến và bắt đầu video với việc sử dụng JavaScript.

Vì vậy, chúng tôi cần chuyển đổi URL ban đầu. Có vẻ như chúng ta chỉ có 2 thông số quan trọng trong URL - bckeybctid:

NSString *urlString = @"http://link.brightcove.com/services/player/bcpid1683318714001?bckey=AQ~~,AAAAC59qSJk~,vyxcsD3OtBPHZ2UIrFX2-wdCLTYNyMNn&bclid=1644543007001&bctid=2238216269001"; 

NSError *error; 
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"bckey=([^&]*)" options:0 error:&error]; 
NSTextCheckingResult *match = [regex firstMatchInString:urlString options:0 range:NSMakeRange(0, urlString.length)]; 
NSString *bckey = [urlString substringWithRange:[match rangeAtIndex:1]]; 

regex = [NSRegularExpression regularExpressionWithPattern:@"bctid=([0-9]*)" options:0 error:&error]; 
match = [regex firstMatchInString:urlString options:0 range:NSMakeRange(0, urlString.length)]; 
NSString *bctid = [urlString substringWithRange:[match rangeAtIndex:1]]; 

NSString *newUrlString = [NSString stringWithFormat:@"http://c.brightcove.com/services/viewer/htmlFederated?&playerKey=%@&videoID=%@", bckey, bctid]; 

Và tải URL

[_webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:newUrlString]]]; 

mới Sau URL đang tải, chúng tôi được tiếp cận với player đối tượng.Đối tượng này có thể biết thời điểm video đã sẵn sàng phát và bắt đầu phát lại

- (void)webViewDidFinishLoad:(UIWebView *)webView 
{ 
    if (!webView.isLoading) 
    { 
     [self checkForVideoReady]; 
    } 

} 
// Checking player object for ready. If it ready - starting video. Otherwise waiting 1 second 
- (void)checkForVideoReady 
{ 
    if (![[_webView stringByEvaluatingJavaScriptFromString:@"player.ready"] isEqualToString:@"true"]) 
    { 
     [self performSelector:@selector(checkForVideoReady) withObject:nil afterDelay:1]; 
    } 
    else 
    { 
     [_webView stringByEvaluatingJavaScriptFromString:@"player.videoPlayer.playButton.element.click();"]; 
    } 
} 

Tôi biết rằng điều này không thanh lịch, có thể ai đó sẽ tìm cách cải thiện nó.
Hãy bình luận.

+0

Cảm ơn bạn đã trả lời. Câu trả lời của bạn có ý nghĩa rất nhiều nhưng nó không hoạt động khi tôi thực hiện nó. Có cái gì tôi đang mất tích? Vui lòng kiểm tra chỉnh sửa. –

4

Nếu bạn muốn chơi một bài hát chỉ , như & khi lượt xem trên web. Sau đó, bạn cần phải gọi chức năng chơi trong

`- (void)webViewDidFinishLoad:(UIWebView *)webView { 

    // Do whatever you want here 
    // play song 
}` 

nhưng chắc chắn rằng bạn đã gán đại biểu để webview của bạn như thế này

<UIWebView_object>.delegate = self; 

này sẽ tự động chơi một bài hát như & khi tải webview

Thưởng thức Lập trình !!

+0

Cảm ơn bạn đã trả lời. Tôi không hiểu câu trả lời của bạn khác với những gì tôi đã làm. Bạn có thể giải thích? –

+1

@Foram thậm chí bạn đã đọc câu hỏi chưa? –

+0

@ B.Money, Có, Dù tôi hiểu gì từ câu hỏi của bạn, bạn muốn chơi một bài hát từ UIWebView mà không cần chạm vào nó, đó là ngay sau khi tải ứng dụng, đúng không? –

1

bạn ca có "tự động phát" "trên" trong javascript của trang web bạn đang tải trong chế độ xem web.

1
- (void)videoThumb:(NSString *)urlString frame:(CGRect)frame { 
     NSString *embedHTML = @"\ 
     <html><head>\ 
     <style type=\"text/css\">\ 
     body {\ 
     background-color: transparent; 
     color: white; 
     }\ 
     </style>\ 
     </head><body style=\"margin:0\">\ 
     <embed id=\"yt\" src=\"%@\" type=\"application/x-shockwave-flash\" \ 
     width=\"%0.0f\" height=\"%0.0f\"></embed>\ 
     </body></html>"; 


    NSString *html = [NSString stringWithFormat:embedHTML, urlString, frame.size.width,frame.size.height]; 

    [webView loadHTMLString:html baseURL:nil]; 
    [self.view addSubview:webView]; 
    [webView release]; 
} 

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
    //Include above function to your page and call it by passing the urlstring 
    //frame : this parameter needs the size of the thumb you want to use. 
    [self videoThumb:url:frame]; 
} 

Chỉ cần gọi videoThức năng bằng cách chuyển url bạn muốn chơi và thực hiện.

+0

http://stackoverflow.com/questions/9992735/video-playing-automatically-in-uiwebview/9993698#comment22222207_9993698 tham khảo cùng một câu hỏi và câu trả lời trên liên kết này, lượt truy cập sẽ hữu ích cho bạn. – Kuldeep