9.3乙嘀、WKWebView

import UIKit
import WebKit
import JavaScriptCore
let DeviceWidth = UIScreen.main.bounds.width
let DeviceHeight = UIScreen.main.bounds.height

class WkWebViewController: UIViewController,WKUIDelegate,WKNavigationDelegate,WKScriptMessageHandler {
var webUrl:String?
var titleName:String? = ""

    override func viewDidLoad() {
    super.viewDidLoad()
        self.setNav()

// 1醇滥、進(jìn)入網(wǎng)頁
// self.webUrl = "http://www.baidu.com"
// 查看彈出框
// self.webUrl = "http://evt.tiancity.com/csol2/1565/home/index.php"
// 事件交互
self.webUrl = "https://testm.modai.cc/Activity/AnniversaryAward.aspx#url=app"
// self.webUrl = "https://www.apple.com"
// self.webUrl = "http://192.168.0.160:8089/Activity/riskEntrance"
self.view.addSubview(self.wkwebView)
self.wkwebView.addSubview(self.progressView)
self.wkwebView.addObserver(self, forKeyPath: "estimatedProgress", options: NSKeyValueObservingOptions.new, context: nil)
}
func setNav() {
self.title = titleName
// 適應(yīng)導(dǎo)航
self.automaticallyAdjustsScrollViewInsets = true
let leftBtns = UIBarButtonItem(image: UIImage.init(named: "back")?.withRenderingMode(UIImageRenderingMode.alwaysOriginal), style: .plain, target: self, action: #selector(backToOneVC))
self.navigationItem.leftBarButtonItem = leftBtns
}
@objc func backToOneVC() {
if self.wkwebView.canGoBack {
self.wkwebView.goBack()
}else{
self.navigationController?.popViewController(animated: true)
}
}
lazy var configuration: WKWebViewConfiguration = {
let config = WKWebViewConfiguration()
// 設(shè)置偏好設(shè)置
config.preferences = WKPreferences()
// 默認(rèn)為0
config.preferences.minimumFontSize = 10
// 默認(rèn)認(rèn)為YES
config.preferences.javaScriptEnabled = true
// 在iOS上默認(rèn)為NO片吊,表示不能自動通過窗口打開
config.preferences.javaScriptCanOpenWindowsAutomatically = false
// web內(nèi)容處理池
config.processPool = WKProcessPool()
// 通過JS與webview內(nèi)容交互
config.userContentController = WKUserContentController()
// 注入JS對象名稱AppModel换团,當(dāng)JS通過AppModel來調(diào)用時凡怎,
// // 我們可以在WKScriptMessageHandler代理中接收到
// config.userContentController.add(self, name: "AwardBuy")
return config
}()
lazy var wkwebView: WKWebView = {
//獲取導(dǎo)航欄高度
let navHeight = self.navigationController?.navigationBar.frame.height
//獲取狀態(tài)欄高度
let statusHeight = UIApplication.shared.statusBarFrame.height
let wkwebview = WKWebView(frame: CGRect(x: 0, y: navHeight!+statusHeight, width: DeviceWidth, height: DeviceHeight-(navHeight!+statusHeight)), configuration: self.configuration)
wkwebview.uiDelegate = self
wkwebview.navigationDelegate = self
wkwebview.allowsBackForwardNavigationGestures = true
wkwebview.load(NSURLRequest(url: URL(string: self.webUrl!)!) as URLRequest)
return wkwebview
}()
lazy var progressView : UIProgressView = {
let pp = UIProgressView.init(frame: CGRect.init(x: 0, y: 0, width: view.frame.size.width, height: 2))
pp.progress = 0.0
pp.tintColor = UIColor.red
// pp.backgroundColor = UIColor.lightGray
// pp.transform = CGAffineTransform.init(scaleX: 1, y: 1)
return pp
}()
// js的提示框事件
func webView(_ webView: WKWebView, runJavaScriptAlertPanelWithMessage message: String, initiatedByFrame frame: WKFrameInfo, completionHandler: @escaping () -> Void) {
let alert = UIAlertController(title: nil, message: message, preferredStyle: .alert)
alert.addAction(UIAlertAction(title: "Ok", style: .default, handler: { () -> Void in
completionHandler()
}))
self.present(alert, animated: true, completion: nil)
}
override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
if keyPath == "estimatedProgress" {
self.progressView.alpha = 1.0
progressView.setProgress(Float(self.wkwebView.estimatedProgress), animated: true)
//進(jìn)度條的值最大為1.0
if(self.wkwebView.estimatedProgress >= 1.0) {
UIView.animate(withDuration: 0.3, delay: 0.1, options: .curveEaseInOut, animations: {
self.progressView.alpha = 0.0
}) { (finish:Bool) in
self.progressView.progress = 0
}
}
}
}
func webView(
webView: WKWebView, didFinish navigation: WKNavigation!) {
self.wkwebView.evaluateJavaScript("AwardBuy", completionHandler: {(any,error) in
print("111111---------AwardBuy-------------")
if error != nil{
print("---------AwardBuy-------------")
}
})

}
func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) {
    print("點(diǎn)擊h5 返回=====\(message)")
    if message.name == "AwardBuy" {
        let dict = message.body as! NSDictionary
        
        let values = dict["tag"]
        print(values ?? "000")
        if let a = values {
            let b:Int = a as! Int
            print("進(jìn)入判斷===\(a)")
            if b == 4 {//收藏
                self.collectAction(dict: dict)
            }else if b == 3 {//分享
                
            }else if b == 1 {//支付
         
            }
        }
    }else{
        print("點(diǎn)擊h5 其他函數(shù)=====\(message)")
    }
}
func collectAction(dict:NSDictionary) {
    let alert = UIAlertController(title: "溫馨提示", message: "收藏成功", preferredStyle: .alert)
    alert.addAction(UIAlertAction(title: "知道了", style: .default, handler: nil))
    self.present(alert, animated: true, completion: nil)
    
}
override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}


/*
// MARK: - Navigation

// In a storyboard-based application, you will often want to do a little preparation before navigation
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    // Get the new view controller using segue.destinationViewController.
    // Pass the selected object to the new view controller.
}
*/

}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末校焦,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子统倒,更是在濱河造成了極大的恐慌寨典,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,194評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件房匆,死亡現(xiàn)場離奇詭異凝赛,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)坛缕,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評論 2 385
  • 文/潘曉璐 我一進(jìn)店門墓猎,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人赚楚,你說我怎么就攤上這事毙沾。” “怎么了宠页?”我有些...
    開封第一講書人閱讀 156,780評論 0 346
  • 文/不壞的土叔 我叫張陵左胞,是天一觀的道長。 經(jīng)常有香客問我举户,道長烤宙,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,388評論 1 283
  • 正文 為了忘掉前任俭嘁,我火速辦了婚禮躺枕,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己拐云,他們只是感情好罢猪,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,430評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著叉瘩,像睡著了一般膳帕。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上薇缅,一...
    開封第一講書人閱讀 49,764評論 1 290
  • 那天危彩,我揣著相機(jī)與錄音,去河邊找鬼泳桦。 笑死恬砂,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的蓬痒。 我是一名探鬼主播泻骤,決...
    沈念sama閱讀 38,907評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼梧奢!你這毒婦竟也來了狱掂?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,679評論 0 266
  • 序言:老撾萬榮一對情侶失蹤亲轨,失蹤者是張志新(化名)和其女友劉穎趋惨,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體惦蚊,經(jīng)...
    沈念sama閱讀 44,122評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡器虾,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,459評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了蹦锋。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片兆沙。...
    茶點(diǎn)故事閱讀 38,605評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖莉掂,靈堂內(nèi)的尸體忽然破棺而出葛圃,到底是詐尸還是另有隱情,我是刑警寧澤憎妙,帶...
    沈念sama閱讀 34,270評論 4 329
  • 正文 年R本政府宣布库正,位于F島的核電站,受9級特大地震影響厘唾,放射性物質(zhì)發(fā)生泄漏褥符。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,867評論 3 312
  • 文/蒙蒙 一抚垃、第九天 我趴在偏房一處隱蔽的房頂上張望喷楣。 院中可真熱鬧趟大,春花似錦、人聲如沸抡蛙。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽粗截。三九已至,卻和暖如春捣炬,著一層夾襖步出監(jiān)牢的瞬間熊昌,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評論 1 265
  • 我被黑心中介騙來泰國打工湿酸, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留婿屹,地道東北人。 一個月前我還...
    沈念sama閱讀 46,297評論 2 360
  • 正文 我出身青樓推溃,卻偏偏與公主長得像昂利,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子铁坎,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,472評論 2 348

推薦閱讀更多精彩內(nèi)容