Используя swift 4 и IOS 12, я использую webViewKit для загрузки веб-сайта. Одной из функций веб-приложения является сканирование qrcode, я успешно загрузил веб-сайт, но я все еще пытаюсь получить доступ к камере устройства для сканирования qr-кода, в android все работает нормально, включая этот сканер qr-кода с помощью метода webView onPermissionRequest. Я уже пробовал это
Ключ: конфиденциальность - описание использования камеры в info.plist
и добавление этих строк кода здесь AVCaptureDevice.authorizationStatus (для: .video) при загрузке URL-адреса перед нажатием веб-кнопки для сканирования qr-кода. По словам нашего веб-разработчика, это нажатие кнопки выполняет неопределенную функцию javascript, но я не знаю, как заставить webViewKit реагировать на это событие нажатия кнопки, и самое сложное в том, что нет журналов или NSLogs для оценки. Я новичок в разработке IOS почти месяц. Спасибо
var WebCodeCamJS = function(element) {
'use strict';
this.Version = {
name: 'WebCodeCamJS',
version: '2.7.0',
author: 'Tóth András',
};
var mediaDevices = window.navigator.mediaDevices;
mediaDevices.getUserMedia = function(c) {
return new Promise(function(y, n) {
(window.navigator.getUserMedia || window.navigator.mozGetUserMedia || window.navigator.webkitGetUserMedia).call(navigator, c, y, n);
});
}
HTMLVideoElement.prototype.streamSrc = ('srcObject' in HTMLVideoElement.prototype) ? function(stream) {
this.srcObject = !!stream ? stream : null;
} : function(stream) {
if (!!stream) {
this.src = (window.URL || window.webkitURL).createObjectURL(stream);
} else {
this.removeAttribute('src');
}
};
Выше кода - функция js с именем webcodecamjs.js, которая выполняется из события нажатия кнопки на веб-странице. Я нашел похожую проблему с решением здесь , но я не совсем уверен, как это реализовать, он говорит
- Теперь добавьте JS-файл (WebRTC.js), который определяет различные классы WebRTC, функции и передает вызовы в WKWebView.
- В WKWebView внедрить скрипт при запуске документа:
куда мне поместить этот файл WebRTC.js? я создал новый файл в своем проекте ios и назвал его WebRTC.js. Я также попытался переименовать его в webcodecamjs.js, как в файлах web js, как я это делал в func viewDidAppear
let contentController = WKUserContentController()
contentController.add(self, name: "callbackHandler")
let script = try! String(contentsOf: Bundle.main.url(forResource: "webcodecamjs", withExtension: "js")!, encoding: String.Encoding.utf8)
contentController.addUserScript(WKUserScript(source: script, injectionTime: WKUserScriptInjectionTime.atDocumentStart, forMainFrameOnly: true))
let preferences = WKPreferences()
preferences.javaScriptEnabled = true
let configuration = WKWebViewConfiguration()
configuration.preferences = preferences
configuration.userContentController = contentController
configuration.allowsPictureInPictureMediaPlayback = true
webView.navigationDelegate = self
webView.configuration.preferences = configuration.preferences
WKWebView.load(webView)(NSURLRequest(url: NSURL(string: encodedLoginUrl)! as URL) as URLRequest)
webView - это
@ IBOutlet слабый var webView: WKWebView
не указано ниже
var webView: WKWebView
вот почему я не могу сделать что-то вроде ниже, потому что это дает мне «слабое» предупреждение
webView = WKWebView (фрейм: CGRect.zero, конфигурация: config)