появляется сообщение об ошибке: DOMException: undefine не является объектом (оценка 'navigator .mediaDevices.getUserMedia')
Код: Выделить всё
#pragma mark UIImagePickerController delegate
- (void)webView:(WKWebView *)webView
requestMediaCapturePermissionForOrigin:(WKSecurityOrigin *)origin
initiatedByFrame:(WKFrameInfo *)frame type:(WKMediaCaptureType)type
decisionHandler:(void (^)(WKPermissionDecision decision))decisionHandler
API_AVAILABLE(ios(15.0))
{
decisionHandler(WKPermissionDecisionGrant);
}
else if ([message.name isEqualToString:@"cameraAccess"]) {
[AVCaptureDevice requestAccessForMediaType:AVMediaTypeVideo completionHandler:^(BOOL granted) {
if (granted) {
NSLog(@“granted”);
dispatch_async(dispatch_get_main_queue(), ^{
[self.wkWebView evaluateJavaScript:@"getCameraAccess()" completionHandler:^(id _Nullable, NSError * _Nullable error) {
if (error) {
NSLog(@“erorr);
}
}];
});
} else {
NSLog(@“no granted”);
}];
- (WKWebView *)wkWebView {
if (!_wkWebView) {
WKWebViewConfiguration *wkWebConfig = [[WKWebViewConfiguration alloc] init];
wkWebConfig.allowsInlineMediaPlayback = YES;
wkWebConfig.mediaTypesRequiringUserActionForPlayback = YES;
wkWebConfig.allowsAirPlayForMediaPlayback = YES;
WKPreferences *preferences = [WKPreferences new];
preferences.javaScriptCanOpenWindowsAutomatically = YES;
wkWebConfig.preferences = preferences;
WKUserContentController *userContentController = [[WKUserContentController alloc]init];
// NSString *jSString = @"var meta = document.createElement('meta'); meta.setAttribute('name', 'viewport'); meta.setAttribute('content', 'width=device-width'); document.getElementsByTagName('head')[0].appendChild(meta);";
NSString *jSString = @"console.log = (function(oriLogFunc){return function(str){oriLogFunc.call(console,str);window.webkit.messageHandlers.log.postMessage(str);}})(console.log);";
WKUserScript *wkUserScript = [[WKUserScript alloc] initWithSource:jSString injectionTime:WKUserScriptInjectionTimeAtDocumentEnd forMainFrameOnly:YES];
[userContentController addUserScript:wkUserScript];
wkWebConfig.userContentController = userContentController;
[userContentController addScriptMessageHandler:self name:ZJH5JSLivenessIdTitle];
[userContentController addScriptMessageHandler:self name:ZJH5JSDismissLoadingTitle];
[userContentController addScriptMessageHandler:self name:ZJH5JSLivenessResultTitle];
[userContentController addScriptMessageHandler:self name:@"cameraAccess"];
[userContentController addScriptMessageHandler:self name:@"log"];
_wkWebView = [[WKWebView alloc] initWithFrame:CGRectMake(0, ZJStatusBarHeight, ZJScreenWidth, ZJScreenHeight - ZJStatusBarHeight) configuration:wkWebConfig];
_wkWebView.backgroundColor = [UIColor whiteColor];
_wkWebView.multipleTouchEnabled = YES;
_wkWebView.userInteractionEnabled = YES;
_wkWebView.scrollView.scrollEnabled = YES;
_wkWebView.contentMode = UIViewContentModeScaleAspectFit;
_wkWebView.UIDelegate = self;
_wkWebView.navigationDelegate = self;
}
return _wkWebView;
}
Код: Выделить всё
if (navigator.mediaDevices.getUserMedia) {
console.log('getUserMedia')
stream = await navigator.mediaDevices.getUserMedia(constrains)
// this.startCompression(stream)
} else if (navigator.webkitGetUserMedia) {
console.log('webkitGetUserMedia')
stream = await navigator.webkitGetUserMedia(constrains)
} else if (navigator.mozGetUserMedia) {
console.log('mozGetUserMedia')
// eslint-disable-next-line
stream = await navagator.mozGetUserMedia(constrains)
} else if (navigator.getUserMedia) {
console.log('old getUserMedia')
stream = await navigator.getUserMedia(constrains)
} else {
console.log('open camera error')
}
Подробнее здесь: https://stackoverflow.com/questions/787 ... mbedded-h5
Мобильная версия