ios - WKWebView 在打开相机 Swift 时关闭

标签 ios swift wkwebview

我有一个 WKWebView 应用程序,显示的网页上有一个文件条目,其中应该拍照。每当我按下此输入时,应用程序就会关闭,在 android 中我设法通过一些权限来解决,但在 ios 中我缺乏经验。

我能做什么?这个打开相机的按钮位于上传到 WKwebview 的网站中。

我的代码

//
//  ViewController.swift


import UIKit
import WebKit

class ViewController: UIViewController, WKNavigationDelegate{

    @IBOutlet weak var webView: WKWebView!

        //  Inicio Atividade
    override func viewDidLoad() {
        super.viewDidLoad()

        // Oculta Navbar
        self.navigationController?.isNavigationBarHidden = true

        //  User Agent
        webView.customUserAgent = "Mozilla/5.0 (iPhone; CPU iPhone OS 11_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/11.0 Mobile/15E148 Safari/604.1"
        webView.navigationDelegate = self

        // Verifica Conexao
        if CheckInternet.Connection(){

            let url = URL(string: "https://www.sitemercado.com.br/frade/")
            let request = URLRequest(url: url!)
            webView.load(request)
        }
        else{
            let storyboard = UIStoryboard(name: "Main", bundle: nil)
            let secondVC = storyboard.instantiateViewController(withIdentifier: "OffViewController") as! OffViewController
            self.navigationController?.pushViewController(secondVC, animated: false)
        }
    }

    // Notifi Segundo Plano
    override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)
    NotificationCenter.default.addObserver(self, selector: #selector(WillEnterForeground), name: .UIApplicationWillEnterForeground, object: nil)
    }

    // Segundo plano verifica
    @objc fileprivate func WillEnterForeground() {
        if CheckInternet.Connection(){
        }

        else{
            let storyboard = UIStoryboard(name: "Main", bundle: nil)
            let secondVC = storyboard.instantiateViewController(withIdentifier: "OffViewController") as! OffViewController
            self.navigationController?.pushViewController(secondVC, animated: false)
        }
    }

    // Limpa Notifi
    deinit {
        NotificationCenter.default.removeObserver(self, name: .UIApplicationWillEnterForeground, object: nil)
    }
    // Detectar Erro Beta
    func webView(_ webView: WKWebView, didFailProvisionalNavigation navigation: WKNavigation!, withError error: Error) {
        let storyboard = UIStoryboard(name: "Main", bundle: nil)
        let secondVC = storyboard.instantiateViewController(withIdentifier: "OffViewController") as! OffViewController
        self.navigationController?.pushViewController(secondVC, animated: false)
    }

    // Tratamento target_blank
    func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
        if navigationAction.targetFrame == nil {
            if let url = navigationAction.request.url {
                let app = UIApplication.shared
                if app.canOpenURL(url) {
                    app.open(url, options: [:], completionHandler: nil)
                }
            }
        }
        decisionHandler(.allow)
    }
}

最佳答案

您应该在应用程序启动时要求用户授予相机访问权限。这很容易:

AVCaptureDevice.requestAccess(for: AVMediaType.video) { response in
    if response {
        //access granted
    } else {

    }
}

用户授予权限后,您应该可以拍照:)

关于ios - WKWebView 在打开相机 Swift 时关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54674542/

相关文章:

iphone - 如何将 JSON 序列化数据转换为 NSDictionary

ios - 使用硬编码用户名和密码 ios 将视频上传到 youtube

ios - 从 3D Touch 快捷菜单加载 View

python - 如何从 firebase 检索数据数组

javascript - 获取 WKWebView 的内容高度不正确

ios - Codable 或 JSONSerialization - 需要从网页中获取一些 javascript 包装的文本

arrays - 检查数组的所有元素是否在 Swift 中具有相同的值

ios - SwiftUI:带有 TextView 的混合模式使重叠区域变为白色,其余区域变为黑色

html - 在 OS X 中构建和显示 html 文件

ios - 有没有办法确定 WKWebView 或 SFSafariViewController View 中某个点的元素是什么?