iOS WKWebview 图片浏览

2022-04-11  本文已影响0人  9岁就很6

func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
        
      //计算webView高度
        updateWebViewHeight()
        
        // 禁用用户选择
        webView.evaluateJavaScript("document.documentElement.style.webkitUserSelect='none';") { result, error in
            
        }
        
        // 禁用长按弹出框
        webView.evaluateJavaScript("document.documentElement.style.webkitTouchCallout='none';") { result, error in
            
        }
        
        let javascript = "var meta = document.createElement('meta');meta.setAttribute('name', 'viewport');meta.setAttribute('content', 'width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no');document.getElementsByTagName('head')[0].appendChild(meta);"
        webView.evaluateJavaScript(javascript, completionHandler: nil)
        
        
        let jsGetImages =
        "function getImages(){" +
        "var objs = document.getElementsByTagName(\"img\");" +
        "var imgScr = '';" +
        "for(var i=0;i<objs.length;i++){" +
        "imgScr = imgScr + objs[i].src + '+';" +
        "};" +
        "return imgScr;" +
        "};"
        webView.evaluateJavaScript(jsGetImages, completionHandler:nil)
        //添加图片可点击js
        let jsClickImage =
            "function registerImageClickAction(){" +
            "var imgs=document.getElementsByTagName('img');" +
            "var length=imgs.length;" +
            "for(var i=0;i<length;i++){" +
            "img=imgs[i];" +
            "img.onclick=function(){" +
            "window.location.href='image-preview:'+this.src}" +
            "}" +
            "}"
        webView.evaluateJavaScript(jsClickImage, completionHandler: nil)
        webView.evaluateJavaScript("getImages()") { result, error in
            //获取h5页面的图片url合集
            guard let urlResult = result as? String else {
                return
            }
            //所有Url的数组
            var urlArry = urlResult.components(separatedBy: "+")
            urlArry.removeLast()
            self.imgUrlArray.append(contentsOf: urlArry)
            for url in self.imgUrlArray{
                let photo = SKPhoto.photoWithImageURL(url)
                photo.shouldCachePhotoURLImage = false // you can use image cache by true(NSCache)
                self.images.append(photo)
            }
        }
        webView.evaluateJavaScript("registerImageClickAction();", completionHandler:nil)
        
        self.webView.isHidden = false
    }

 
    @available(iOS 8.0, *)
    func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
        let requestString = navigationAction.request.url?.absoluteString
          print(requestString!)
          if (requestString?.hasPrefix("image-preview"))!{
            let imgUrl = NSString.init(string: requestString!).substring(from: "image-preview:".count )
            guard let index = imgUrlArray.firstIndex(of: imgUrl) else {
                let browser = SKPhotoBrowser(photos: images)
                CommonUtil.getCurrentVC()?.present(browser, animated: true, completion: nil)
                return
            }
            let browser = SKPhotoBrowser(photos: images)
            browser.initializePageIndex(index)
            CommonUtil.getCurrentVC()?.present(browser, animated: true, completion: nil)
          }
          decisionHandler(.allow) //一定要加上这句话
    }


    func updateWebViewHeight() {
        webView.evaluateJavaScript("document.body.scrollHeight") { result, error in
            //获取页面高度,并重置webview的frame
            if let value = result {
                guard let lastHeight  = value as? Double else { return }
                if (lastHeight == self.webViewHeight) {
                    return
                }
                DispatchQueue.main.async {
                    self.webViewHeight = lastHeight
                }
            }
        }
    }

上一篇下一篇

猜你喜欢

热点阅读