Swift: WKWebView的簡單使用

import UIKit
import WebKit
class MyViewController: UIViewController {

    var webView = WKWebView()
    
    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        
        self.progressView.frame = CGRect(x:0,y:64,width:self.view.frame.size.width,height:2)
        self.progressView.isHidden = false
        UIView.animate(withDuration: 1.0) {
            self.progressView.progress = 0.0
        }
    }

    override func viewDidLoad() {
        super.viewDidLoad()
      
        let url = "http://www.reibang.com/u/5ab7d4b14cbe"
        
        webView = WKWebView(frame: CGRect(x: 0, y: 0, width: UIScreen.main.bounds.size.width, height: UIScreen.main.bounds.size.height))
        view.addSubview(webView)
        webView.navigationDelegate = self
        let mapwayURL = URL(string: url)!
        let mapwayRequest = URLRequest(url: mapwayURL)
        webView.load(mapwayRequest)
       
        view.addSubview(self.progressView)
    }
    
    
    // 進度條
    lazy var progressView:UIProgressView = {
        let progress = UIProgressView()
        progress.progressTintColor = UIColor.orange
        progress.trackTintColor = .clear
        return progress
    }()

}

extension MyViewController:WKNavigationDelegate{
    // 頁面開始加載時調用
    func webView(_ webView: WKWebView, didStartProvisionalNavigation navigation: WKNavigation!){
        self.navigationItem.title = "加載中..."
        /// 獲取網(wǎng)頁的progress
        UIView.animate(withDuration: 0.5) {
            self.progressView.progress = Float(self.webView.estimatedProgress)
        }
    }
    // 當內(nèi)容開始返回時調用
    func webView(_ webView: WKWebView, didCommit navigation: WKNavigation!){
        
    }
    // 頁面加載完成之后調用
    func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!){
        /// 獲取網(wǎng)頁title
        self.title = self.webView.title
        
        UIView.animate(withDuration: 0.5) {
            self.progressView.progress = 1.0
            self.progressView.isHidden = true
        }
    }
    // 頁面加載失敗時調用
    func webView(_ webView: WKWebView, didFail navigation: WKNavigation!, withError error: Error){
        
        UIView.animate(withDuration: 0.5) {
            self.progressView.progress = 0.0
            self.progressView.isHidden = true
        }
        /// 彈出提示框點擊確定返回
        let alertView = UIAlertController.init(title: "提示", message: "加載失敗", preferredStyle: .alert)
        let okAction = UIAlertAction.init(title:"確定", style: .default) { okAction in
            _=self.navigationController?.popViewController(animated: true)
        }
        alertView.addAction(okAction)
        self.present(alertView, animated: true, completion: nil)
        
    }
    
}

JS調Native APP :首先,得改下創(chuàng)建WKWebView的代碼,添加進自己的一些配置,代碼如下:

lazy var webView : WKWebView = {
        /// 自定義配置
        let conf = WKWebViewConfiguration()
        conf.userContentController = WKUserContentController()
        conf.preferences.javaScriptEnabled = true
        conf.selectionGranularity = WKSelectionGranularity.character
        conf.userContentController.add(self, name: "和web那邊一樣的方法名")
        let web = WKWebView( frame: CGRect(x:0, y:64,width:ScreenW, height:ScreenH),configuration:conf)
        /// 設置訪問的URL
        let url = NSURL(string: "http://www.reibang.com/u/37fe1e005f6c")
        /// 根據(jù)URL創(chuàng)建請求
        let requst = NSURLRequest(url: url! as URL)
        /// 設置代理
//        web.uiDelegate = self
        web.navigationDelegate = self
        /// WKWebView加載請求
        web.load(requst as URLRequest)
        
        return web
    }()

接著譬胎,要實現(xiàn)WKScriptMessageHandler的方法

extension YourViewControllerName:WKScriptMessageHandler{//用于與JS交互
    func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) {
        
        if(message.name == "和web那邊一樣的方法名") {
            print("JavaScript is sending a message \(message.body)")
        }
       
    }
    
}

最后带迟,別忘了在移除MessageHandler哦!否則可能會導致內(nèi)存泄漏哦景描。

override func viewWillDisappear(_ animated: Bool) {
        super.viewWillDisappear(animated)
        //當前ViewController銷毀前將其移除十办,否則會造成內(nèi)存泄漏
         webView.configuration.userContentController.removeScriptMessageHandler(forName: "和web那邊一樣的方法名")
    }
最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市超棺,隨后出現(xiàn)的幾起案子向族,更是在濱河造成了極大的恐慌,老刑警劉巖棠绘,帶你破解...
    沈念sama閱讀 218,204評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件件相,死亡現(xiàn)場離奇詭異,居然都是意外死亡氧苍,警方通過查閱死者的電腦和手機夜矗,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來让虐,“玉大人紊撕,你說我怎么就攤上這事∩耐唬” “怎么了对扶?”我有些...
    開封第一講書人閱讀 164,548評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長惭缰。 經(jīng)常有香客問我辩稽,道長,這世上最難降的妖魔是什么从媚? 我笑而不...
    開封第一講書人閱讀 58,657評論 1 293
  • 正文 為了忘掉前任逞泄,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘喷众。我一直安慰自己各谚,他們只是感情好,可當我...
    茶點故事閱讀 67,689評論 6 392
  • 文/花漫 我一把揭開白布到千。 她就那樣靜靜地躺著昌渤,像睡著了一般。 火紅的嫁衣襯著肌膚如雪憔四。 梳的紋絲不亂的頭發(fā)上膀息,一...
    開封第一講書人閱讀 51,554評論 1 305
  • 那天,我揣著相機與錄音了赵,去河邊找鬼潜支。 笑死,一個胖子當著我的面吹牛柿汛,可吹牛的內(nèi)容都是我干的冗酿。 我是一名探鬼主播,決...
    沈念sama閱讀 40,302評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼络断,長吁一口氣:“原來是場噩夢啊……” “哼裁替!你這毒婦竟也來了?” 一聲冷哼從身側響起貌笨,我...
    開封第一講書人閱讀 39,216評論 0 276
  • 序言:老撾萬榮一對情侶失蹤弱判,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后锥惋,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體裕循,經(jīng)...
    沈念sama閱讀 45,661評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,851評論 3 336
  • 正文 我和宋清朗相戀三年净刮,在試婚紗的時候發(fā)現(xiàn)自己被綠了剥哑。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,977評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡淹父,死狀恐怖株婴,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情暑认,我是刑警寧澤困介,帶...
    沈念sama閱讀 35,697評論 5 347
  • 正文 年R本政府宣布,位于F島的核電站蘸际,受9級特大地震影響座哩,放射性物質發(fā)生泄漏。R本人自食惡果不足惜粮彤,卻給世界環(huán)境...
    茶點故事閱讀 41,306評論 3 330
  • 文/蒙蒙 一根穷、第九天 我趴在偏房一處隱蔽的房頂上張望姜骡。 院中可真熱鬧,春花似錦屿良、人聲如沸圈澈。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽康栈。三九已至,卻和暖如春喷橙,著一層夾襖步出監(jiān)牢的瞬間啥么,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評論 1 270
  • 我被黑心中介騙來泰國打工贰逾, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留悬荣,地道東北人。 一個月前我還...
    沈念sama閱讀 48,138評論 3 370
  • 正文 我出身青樓似踱,卻偏偏與公主長得像,于是被迫代替她去往敵國和親稽煤。 傳聞我的和親對象是個殘疾皇子核芽,可洞房花燭夜當晚...
    茶點故事閱讀 44,927評論 2 355

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

  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴謹 對...
    cosWriter閱讀 11,101評論 1 32
  • 雖然WKWebView是在Apple的WWDC 2014隨iOS 8和OS X 10.10出來的,是為了解決UIW...
    鄉(xiāng)水情緣閱讀 24,531評論 7 32
  • 前言 關于UIWebView的介紹酵熙,相信看過上文的小伙伴們轧简,已經(jīng)大概清楚了吧,如果有問題匾二,歡迎提問哮独。 本文是本系列...
    CoderLF閱讀 8,967評論 2 12
  • 前言: 目錄:一皮璧、WKWebView基本介紹二、WKWebView新特性三分飞、WebKit框架概覽四悴务、WKWebVi...
    麥穗0615閱讀 1,164評論 0 8
  • 怎么區(qū)別可口可樂和百事可樂呢~讯檐?這里有一個方法:讓它們一起看《麥琪的禮物》,就是以前課文里染服,妻子剪掉美麗頭發(fā)為丈夫...
    洞庭府君閱讀 332評論 0 4