CNWebViewController.swift 4.98 KB
//
//  CNWebViewController.swift
//  metaCode
//
//  Created by zx on 2023/9/21.
//

import Foundation
import WebKit
import WebViewJavascriptBridge
import CNLiveShareToolKit
import CommonCrypto
import CNLiveBusinessTools
import SKPhotoBrowser


let WjjH5 = "wjjh5.cnlive.com"
let ManageshopH5 = "manageshop.cnlive.com"

class CNWebViewController:CNLiveBaseViewController ,WKNavigationDelegate{
    
    var bridge:WKWebViewJavascriptBridge?
    var currentUrl:String = ""//当前网页的url
    
    lazy var webView: CNWebView = {
        let configuration = WKWebViewConfiguration()
        configuration.allowsInlineMediaPlayback = true
        let preferences = WKPreferences()
        preferences.javaScriptCanOpenWindowsAutomatically = true
        preferences.javaScriptEnabled = true
        configuration.preferences.minimumFontSize = 0.0
        configuration.preferences = preferences
        configuration.userContentController = WKUserContentController()
        let webView = CNWebView(frame: CGRectMake(0, KNavigationHeight, Width, Height-KNavigationHeight), configuration: configuration, url: _url)
        webView.cnWebView.scrollView.showsVerticalScrollIndicator = false
        webView.cnWebView.scrollView.showsHorizontalScrollIndicator = false
        webView.isCNWebController = true
        return webView
    }()
    
    lazy var moreNavBtn: UIButton = {
        let moreNavBtn = UIButton(type: .custom)
        moreNavBtn.frame = CGRect(x: 0, y: KStatusBarHeight, width: KNavigationHeight-KStatusBarHeight, height: KNavigationHeight-KStatusBarHeight)
        moreNavBtn.backgroundColor = .clear
        moreNavBtn.setImage(UIImage(named: "web_more"), for: .normal)
        moreNavBtn.addTarget(self, action: #selector(moreNavBtnAction), for: .touchUpInside)
        return moreNavBtn
    }()

    
    var _url:URL?
    var url:URL? {
        get{
            return _url
        }
        set{
            _url = newValue!
        }
    }
    
    deinit {
        self.webView.cnWebView.stopLoading()
        self.webView.cnWebView.navigationDelegate = nil
        self.webView.cnWebView.uiDelegate = nil
        print("WKWebView dealloc")
    }
    
    override func viewDidDisappear(_ animated: Bool) {
        super.viewDidDisappear(animated)
        self.h5StopVideoPlayer()
    }
    
    
    override func viewDidLoad() {
        super.viewDidLoad()
        navigationBarHidden = false
        self.view.addSubview(self.webView)
        self.webView.webControllerUpdateNavBlock = { [weak self] isFinish , title,isDecidePolicy ,urlStr in
            if isFinish{
                self!.titleName = title
            }else if isDecidePolicy{
                if urlStr.contains("&isWjjReport=true") || urlStr.contains("?isWjjReport=true"){
                    self!.rightNavBtns = [self!.moreNavBtn]
                    self!.moreNavBtn.isHidden = false
                }else{
                    self!.moreNavBtn.isHidden = true
                }
            }
        }
        webView.snp.makeConstraints { make in
            make.top.equalTo(get_system_nav_height())
            make.left.right.bottom.equalToSuperview()
        }
    }

    func h5StopVideoPlayer(){
        // call h5停止播放视频
        let data = ["stop": true]
        self.bridge?.callHandler("wjjStopVideoPlayer", data: data, responseCallback: { responseData in
            print("\(responseData ?? "")")
        })
    }
    
    //点击...分享获取h5参数oc call js
    func configBridgeCallHander() -> Void {
        self.webView.bridge?.callHandler("wjjClientGetShareParaFromJS", data: ["":""], responseCallback: { data in
//            print("js call oc\(data)")
            let dic = data as! Dictionary<String, String>
            let title = dic["title"]
            let desc = dic["desc"]
            let shareImg = dic["shareImg"]

            var shareUrl = ""
            if let tempShareUrl = dic["shareUrl"]{
                if tempShareUrl == ""{
                    shareUrl = self.currentUrl
                }else{
                    shareUrl = tempShareUrl
                }
            }else{
                shareUrl = self.currentUrl 
            }
            
            CNLiveShareManager.showShareViewWithParam(forShareTitle: title, shareUrl: shareUrl, shareDesc: desc, shareImage: shareImg, screenFull: false, hiddenWjj: true, hiddenQQ: false, hiddenWB: true, hiddenLifeCircle: true, hiddenWechatCircle: false, hiddenWechat: false, hiddenSafari: true, formVC: self, topImage: [], topTitles: [], platformType: .all) { title in
                
            } completerBlock: { resultType, platformType, typeString in
                if resultType == .succ{
                    
                }
            }
        })
    }

    // MARK: - 内部链接右上角···分享
    @objc func moreNavBtnAction(){
        self.configBridgeCallHander()
    }
    override func ClickBackBtn() {
        if self.webView.cnWebView.canGoBack{
            self.webView.cnWebView.goBack()
        }else{
            super.ClickBackBtn()
        }
    }
}