Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/108.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Html 从iOS Swift中的cam scanner SDK返回时,WKwebview是一个空白的白色屏幕?_Html_Ios_Swift_Webview_Wkwebview - Fatal编程技术网

Html 从iOS Swift中的cam scanner SDK返回时,WKwebview是一个空白的白色屏幕?

Html 从iOS Swift中的cam scanner SDK返回时,WKwebview是一个空白的白色屏幕?,html,ios,swift,webview,wkwebview,Html,Ios,Swift,Webview,Wkwebview,我已经将iframe表单加载到wkwebview中,它工作正常。当点击iframe内的扫描仪按钮并打开相机扫描文档时,文档上传到服务器后,它将返回到wkweb视图,但此处wkweb视图未刷新,并显示一个空白的白色屏幕 以下是我的wkweb视图代码: private func loadWebView(){ webView.uiDelegate = self webView.allowsBackForwardNavigationGestures = true

我已经将iframe表单加载到wkwebview中,它工作正常。当点击iframe内的扫描仪按钮并打开相机扫描文档时,文档上传到服务器后,它将返回到wkweb视图,但此处wkweb视图未刷新,并显示一个空白的白色屏幕

以下是我的wkweb视图代码:

    private func loadWebView(){

    webView.uiDelegate = self
    webView.allowsBackForwardNavigationGestures = true

         do {
             guard let filePath = Bundle.main.path(forResource: "index", ofType: "html")
                 else {
                     // File Error
                     print ("File reading error")
                     return
             }

             let contents =  try String(contentsOfFile: filePath, encoding: .utf8)
             let baseUrl = URL(fileURLWithPath: "https://url")
            DispatchQueue.main.async {

                self.webView.loadHTMLString(contents as String, baseURL: baseUrl)

            }

         }
         catch {
             print ("File HTML error")
         }




    webView.configuration.preferences.javaScriptEnabled = true
    webView.configuration.userContentController.add(self, name: "jsHandler")
    webView.configuration.userContentController.add(self, name: "saveHandler")
    webView.configuration.userContentController.add(self, name: "openCamera")


}

func makeSaveForm(ProcessInstanceId: String, FullFormKey: String, TaskIdValue: String, FormValues: String) -> saveFormModel {

        let newForm = saveFormModel()
        newForm.ProcessInstanceId = ProcessInstanceId
        newForm.FullFormKey = FullFormKey
        newForm.TaskIdValue = TaskIdValue
        newForm.FormValues = FormValues

        return newForm

  }


func ProcessInstanceIDApiCall(ProcessInstId: String){

        let authToken = UserDefaults.standard.string(forKey: "authToken")
        print("id for process instance", ProcessInstId)
                          let bearerToken: String = "Bearer " + (authToken ?? "")
                          print("baearer token::\(bearerToken)")

        let headers:HTTPHeaders = ["Content-Type":"Application/json",
                                  "Authorization": "Bearer " + (authToken ?? ""),
                                  "Accept":"application/json"]

    AF.request("https://api url/process-instance/\(ProcessInstId)/variables", method: .get, parameters: nil, encoding: URLEncoding.default, headers: headers).responseJSON { (response:AFDataResponse<Any>) in


        print("process instance id api",response.result)

        switch response.result {
            case .success:

                print("instance response", response.value )
                guard let data = response.value  else {
//                       print("request failed \(error)")

                           return
                   }

                self.anyValueJson = response.value



                self.jsonStringProcessInstanceID = self.JSONStringify(value: data as AnyObject)



                print("raw response: \(String(describing: self.jsonStringProcessInstanceID))")



                case .failure(let error):
                    print("Error:", error)
                }

        }



    }//api call end

public func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) {

    if message.name == "jsHandler" {
       //  print(message.body)

    } else if message.name == "saveHandler" {

        let values = message.body
        print(values)
        let jsonString = JSONStringify(value: values as AnyObject)
        print(jsonString)

        formValues = jsonString

        let newSaveForm = self.makeSaveForm(ProcessInstanceId:  self.processInstanceId ?? "", FullFormKey: self.fullFormKey ?? "", TaskIdValue: self.taskIdValue ?? "", FormValues: jsonString )

        //realm create/update saveform based task id
        let realm = try! Realm()
        if realm.object(ofType: saveFormModel.self, forPrimaryKey: newSaveForm.TaskIdValue) != nil {
            try! realm.write {
                print("already exist")
                //.all is equivalent to true and .error is equivalent to false
                realm.add(newSaveForm, update: .all)

            }
        } else {
            try! realm.write {
                print("new document written")
                realm.add(newSaveForm) //RLMException occurs here
            }
        }

    } else if message.name == "openCamera" {

      print("open camera",message.body)

        let base64Encoded = message.body
        let jsonString = JSONStringify(value: base64Encoded as AnyObject)

       do{
            if let json = jsonString.data(using: String.Encoding.utf8){
                if let jsonData = try JSONSerialization.jsonObject(with: json, options: .allowFragments) as? [String:AnyObject]{

                    let id = jsonData["scannerData"] as! String
                    print("scanner data ::", id)

                    let vc1 =  ScannerViewController()

                    let v = vc1.scanParameters(scannerDataBase64: id)

                    print("v", v)

                    let newVC = A8Scan(self)
                    newVC.showScanner()



                }
            }
        }catch {
            print(error.localizedDescription)

        }


   func loadFormView(){

      let setPath = "https://api url/\(formKey ?? "")/index.html";
            let js = "setFrame('" + setPath + "')";
            print("js::\(js)")

            webView.evaluateJavaScript(js) { (r, error) in

                if error == nil {

                    DispatchQueue.main.asyncAfter(deadline: .now() + 2.0){

                        print(r ?? "empty")

                        let realm = try! Realm()
                        let object = realm.object(ofType: saveFormModel.self, forPrimaryKey: self.taskIdValue)
                        print("object", object ?? "")



                        print("json api string", self.jsonStringProcessInstanceID ?? "")

                        let authValue =  "Bearer  \(self.authTokenValue ?? "")"

                        if object?.FullFormKey != nil {
                               if let jsonStr = self.jsonStringProcessInstanceID {
                            let l = "loadform('\(object?.FullFormKey ?? "")', '\(authValue)', '\(object?.ProcessInstanceId ?? "")', \(object?.FormValues ?? ""), \(jsonStr))"
                            self.webView.evaluateJavaScript(l, completionHandler: nil)
                            }

                        } else {

                            if let jsonStr = self.jsonStringProcessInstanceID {

                                print("json str::::", jsonStr)

                                let l = "loadform('\(self.fullFormKey ?? "")', '\( authValue)', '\(self.processInstanceId ?? "")', \(jsonStr))"
                                self.webView.evaluateJavaScript(l, completionHandler: nil)
                            }


                        }



                        self.tapCallback = {

                            print("tap called save")
    //                        let s = "submitEvent('\(self.saveArg)')"
                                let save = "submitEvent('save');"

                            self.webView.evaluateJavaScript(save, completionHandler: nil)

                        }

                    }
                } else {

                    print("web view didfinish loading error",error)
                }

            }
}


   public func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {

       print("Web View didFinish Loading");
    loadFormView()




   }
private func loadWebView(){
webView.uiDelegate=self
webView.AllowsBackforwardNavigationPigests=true
做{
guard let filePath=Bundle.main.path(forResource:“index”,of type:“html”)
否则{
//文件错误
打印(“文件读取错误”)
返回
}
let contents=try字符串(contentsofile:filePath,编码:.utf8)
让baseUrl=URL(fileURLWithPath:)https://url")
DispatchQueue.main.async{
self.webView.loadHTMLString(内容为字符串,baseURL:baseURL)
}
}
抓住{
打印(“文件HTML错误”)
}
webView.configuration.preferences.javaScriptEnabled=true
webView.configuration.userContentController.add(self,名称:“jsHandler”)
webView.configuration.userContentController.add(self,名称:“saveHandler”)
webView.configuration.userContentController.add(self,名称:“openCamera”)
}
func makeSaveForm(ProcessInstanceId:String,FullFormKey:String,TaskIdValue:String,FormValues:String)->saveFormModel{
让newForm=saveFormModel()
newForm.ProcessInstanceId=ProcessInstanceId
newForm.FullFormKey=FullFormKey
newForm.TaskIdValue=TaskIdValue
newForm.FormValues=FormValues
返回新表单
}
func ProcessInstanceIDApiCall(PROCESSINSTAD:字符串){
让authToken=UserDefaults.standard.string(forKey:“authToken”)
打印(“流程实例的id”,ProcessInstId)
让bearerToken:String=“Bearer”+(authToken??)
打印(“Baeaer令牌::\(BealerToken)”)
let headers:HTTPHeaders=[“内容类型”:“应用程序/json”,
“授权”:“持有人”+(authToken??),
“接受”:“应用程序/json”]
AF.request(“https://api url/process instance/\(ProcessInstId)/variables”,方法:.get,参数:nil,编码:URLEncoding.default,头:headers.responseJSON{(响应:AFDataResponse)in
打印(“流程实例id api”,response.result)
开关响应。结果{
成功案例:
打印(“实例响应”,response.value)
保护let数据=response.value else{
//打印(“请求失败\(错误)”)
返回
}
self.anyValueJson=response.value
self.jsonStringProcessInstanceID=self.JSONStringify(值:数据为AnyObject)
打印(“原始响应:\(字符串(描述:self.jsonStringProcessInstanceID)))
案例。失败(let错误):
打印(“错误:”,错误)
}
}
}//api调用结束
公用func userContentController(userContentController:WKUserContentController,didReceive消息:WKScriptMessage){
如果message.name==“jsHandler”{
//打印(message.body)
}如果message.name==“saveHandler”,则为else{
让值=message.body
打印(值)
让jsonString=jsonString(值:值为AnyObject)
打印(jsonString)
formValues=jsonString
让newSaveForm=self.makeSaveForm(ProcessInstanceId:self.ProcessInstanceId??,FullFormKey:self.FullFormKey??,TaskIdValue:self.TaskIdValue??,FormValue:jsonString)
//领域创建/更新基于存储表单的任务id
让realm=try!realm()
if realm.object(类型:saveFormModel.self,forPrimaryKey:newSaveForm.TaskIdValue)!=nil{
试试看!写吧{
打印(“已存在”)
//.全部等于真。错误等于假
realm.add(newSaveForm,更新:.all)
}
}否则{
试试看!写吧{
打印(“编写新文档”)
realm.add(newSaveForm)//RLMException出现在这里
}
}
}如果message.name==“openCamera”,则为else{
打印(“打开相机”,消息。正文)
让base64Encoded=message.body
让jsonString=jsonString(值:base64编码为AnyObject)
做{
如果让json=jsonString.data(使用:String.Encoding.utf8){
如果让jsonData=try JSONSerialization.jsonObject(带:json,选项:.allowFragments)作为?[String:AnyObject]{
设id=jsonData[“scannerData”]为!字符串
打印(“扫描仪数据::”,id)
设vc1=ScannerViewController()
设v=vc1.scanParameters(scannerDataBase64:id)
打印(“v”,v)
让newVC=a8扫描(自身)
newVC.showScanner()
}
}
}抓住{
打印(错误。本地化描述)
}
func loadFormView(){
让setPath=”https://api url/\(formKey???)/index.html”;
让js=“setFrame('“+setPath+”)”;
打印(“js::\(js)”)
evaluateJavaScript(js){(r,error)在
如果错误==nil{
DispatchQueue.main.asyncAfter(截止日期:.now()+2.0){
打印(r??“空”)
让realm=try!realm()
让object=realm.object(类型:saveFormModel.self,forPrimaryKey:self.taskIdValue)
打印(“对象”,对象??)
打印(“jso