Как я могу получить доступ к камере во встроенном приложении ios12 h5IOS

Программируем под IOS
Ответить
Anonymous
 Как я могу получить доступ к камере во встроенном приложении ios12 h5

Сообщение Anonymous »

Я уверен, что у приложения уже есть доступ к камере, но во встроенном HTML-коде я все еще не могу открыть камеру. И эта HTML-страница работает в Safari, но не может работать в приложении, если страница встроена в приложение.
появляется сообщение об ошибке: 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;
}
Javascript:

Код: Выделить всё

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')
}
и я также пытаюсь использовать «navigator.getUserMedia» и «navigator.mediaDevices.enumerateDevices()», все это не работает.

Подробнее здесь: https://stackoverflow.com/questions/787 ... mbedded-h5
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «IOS»