fix(WKWebview): Fixed for supporting mediaPlaybackRequiresUserAction option under iOS 10. (#129)

This commit is contained in:
ifsnow 2018-11-19 19:17:57 +09:00 committed by Thibault Malbranche
parent 57e6134e67
commit c0c0116c80

View File

@ -92,7 +92,9 @@ static NSString *const MessageHanderName = @"ReactNative";
wkWebViewConfig.mediaTypesRequiringUserActionForPlayback = _mediaPlaybackRequiresUserAction wkWebViewConfig.mediaTypesRequiringUserActionForPlayback = _mediaPlaybackRequiresUserAction
? WKAudiovisualMediaTypeAll ? WKAudiovisualMediaTypeAll
: WKAudiovisualMediaTypeNone; : WKAudiovisualMediaTypeNone;
wkWebViewConfig.dataDetectorTypes = _dataDetectorTypes; wkWebViewConfig.dataDetectorTypes = _dataDetectorTypes;
#else
wkWebViewConfig.mediaPlaybackRequiresUserAction = _mediaPlaybackRequiresUserAction;
#endif #endif
_webView = [[WKWebView alloc] initWithFrame:self.bounds configuration: wkWebViewConfig]; _webView = [[WKWebView alloc] initWithFrame:self.bounds configuration: wkWebViewConfig];
@ -216,7 +218,7 @@ static NSString *const MessageHanderName = @"ReactNative";
-(void)setHideKeyboardAccessoryView:(BOOL)hideKeyboardAccessoryView -(void)setHideKeyboardAccessoryView:(BOOL)hideKeyboardAccessoryView
{ {
if (_webView == nil) { if (_webView == nil) {
_savedHideKeyboardAccessoryView = hideKeyboardAccessoryView; _savedHideKeyboardAccessoryView = hideKeyboardAccessoryView;
return; return;
@ -225,29 +227,29 @@ static NSString *const MessageHanderName = @"ReactNative";
if (_savedHideKeyboardAccessoryView == false) { if (_savedHideKeyboardAccessoryView == false) {
return; return;
} }
UIView* subview; UIView* subview;
for (UIView* view in _webView.scrollView.subviews) { for (UIView* view in _webView.scrollView.subviews) {
if([[view.class description] hasPrefix:@"WK"]) if([[view.class description] hasPrefix:@"WK"])
subview = view; subview = view;
} }
if(subview == nil) return; if(subview == nil) return;
NSString* name = [NSString stringWithFormat:@"%@_SwizzleHelperWK", subview.class.superclass]; NSString* name = [NSString stringWithFormat:@"%@_SwizzleHelperWK", subview.class.superclass];
Class newClass = NSClassFromString(name); Class newClass = NSClassFromString(name);
if(newClass == nil) if(newClass == nil)
{ {
newClass = objc_allocateClassPair(subview.class, [name cStringUsingEncoding:NSASCIIStringEncoding], 0); newClass = objc_allocateClassPair(subview.class, [name cStringUsingEncoding:NSASCIIStringEncoding], 0);
if(!newClass) return; if(!newClass) return;
Method method = class_getInstanceMethod([_SwizzleHelperWK class], @selector(inputAccessoryView)); Method method = class_getInstanceMethod([_SwizzleHelperWK class], @selector(inputAccessoryView));
class_addMethod(newClass, @selector(inputAccessoryView), method_getImplementation(method), method_getTypeEncoding(method)); class_addMethod(newClass, @selector(inputAccessoryView), method_getImplementation(method), method_getTypeEncoding(method));
objc_registerClassPair(newClass); objc_registerClassPair(newClass);
} }
object_setClass(subview, newClass); object_setClass(subview, newClass);
} }