从webViewKit按钮获得用户权限

时间:2019-01-14 15:59:00

标签: ios swift wkwebview

我使用swift 4和IOS 12,正在使用webViewKit加载网站。 Web应用程序的功能之一是扫描二维码,我已经成功加载了网站,但是我仍在努力如何访问设备摄像头来扫描二维码,在android中一切正常,包括使用webView onPermissionRequest方法的该二维码扫描仪。我已经尝试过了 Key : Privacy - Camera Usage Description in info.plist ,并在加载网址时在此处AVCaptureDevice.authorizationStatus(for: .video)上添加这些代码行,然后按Web按钮扫描二维码。根据我们的Web开发人员的说法,此按钮按下将执行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');
    }
};

上面的代码是一个名为webcodecamjs.js的js函数,它是从网页上的按钮单击事件执行的。我发现解决方案here存在类似问题,但我不确定如何实现,它说

  
      
  1. 现在添加定义各种WebRTC类,功能并将JS调用传递到WKWebView的JS文件(WebRTC.js)。
  2.   
  3. 在WKWebView中,在文档开始处插入脚本:
  4.   

该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弱变量webView:WKWebView

未声明如下

  

var webView:WKWebView

这就是为什么我不能做下面的事情,原因是它给了我'弱'警告

  

webView = WKWebView(框架:CGRect.zero,配置:配置)

1 个答案:

答案 0 :(得分:0)

您可以添加代码段进行检查吗?