swift4 - wkwebview交互

WKWebView用法介紹

本文swift與WKWebView交互Demo地址

前言:蘋果在iOS8中推出了webkit新框架,提供了WKWebview組件用來替換存在各種問題的UIWebview,用WKWebview加載網頁,相較于UIWebview速度更快了,內存占用更少了。WKWebview還提供了更加豐富的接口,功能更加強大,剛學習swift4,代碼擼了一個swift4版與WKWebView交互,特此分享出來,與大家共勉

1.首先Xcode鏈接手機,運行項目工程,打開html界面,然后選中電腦上的safari的開發工具,打開html調試器。

還不會電腦調試html?看這里

使用safari對webview進行調試

項目運行成功,打開我們的調試器如圖
6B74B7D4-42C1-4DF2-A3A8-B913BD3B81B4.png
打開之后的界面
image.png
發現新大陸了,以后媽媽再也不用擔心我的成長了。
這里是以我的上線項目工程為例。大家可以看到上圖中的交互,開出的get_selection_txt(),get_share_txt()等幾個方法,這是我們蘋果端需要調用執行的代碼,細心的同學會看到方法內部做了一個判斷。沒錯就是判斷是android或者是蘋果端的代碼。我們暫且不討論android,主要看下蘋果端的這句代碼
window.webkit.messageHandlers.webViewApp.postMessage({get_selection_txt:rng_string});

從字面上可以看出,是前端向移動端發送命令的語句,這里注意下webViewApp,這是一個交互關鍵。需要提前和前端人員商量好命名規則。我們兩端都需要用到

2.到這里,前端的看的就差不多了,我們來看下swift版本的實現方法

image.png

image.png
    private lazy var articleWeb : WKWebView = {
        let webView = WKWebView.init(frame: view.bounds, configuration: configutation)
        webView.allowsBackForwardNavigationGestures = true
        webView.navigationDelegate = self
        webView.uiDelegate = self
        webView.scrollView.delegate = self
        return webView
    }()
    
    private lazy var configutation: WKWebViewConfiguration = {
       let config = WKWebViewConfiguration()
        config.userContentController.addUserScript(String.userScript())
        config.userContentController.add(WeakScriptMessageDelegate.init(delegate: self), name: "webViewApp")
        return config
    }()
    
    private lazy var progressView : UIProgressView = {
        let pp = UIProgressView.init(frame: CGRect.init(x: 0, y: 64, width: view.frame.size.width, height: 2))
        pp.tintColor = UIColor.blue
        pp.backgroundColor = UIColor.lightGray
        pp.transform = CGAffineTransform.init(scaleX: 1, y: 1)
        return pp
    }()

    func Menu() -> Void {
        let menu = UIMenuController.shared
        let item = UIMenuItem.init(title: "劃重點", action: #selector(point))
        let shareItem = UIMenuItem.init(title: "分享", action: #selector(share))
        let copyItem = UIMenuItem.init(title: "拷貝", action: #selector(copyAction))
        
        menu.menuItems = [item,shareItem,copyItem]
        menu.arrowDirection = .default
        menu.setTargetRect(articleWeb.bounds, in: articleWeb)
        menu.setMenuVisible(true, animated: true)
        
    }

.上圖中大家可以看到,用到了前端定義名稱webViewApp,實現交互

實現UIMenuController的點擊方法,因為本文主要講解交互,對于創建UIMenuController不做重點解析

image.png
    @objc func point() {
        articleWeb.evaluateJavaScript("get_selection()", completionHandler: nil)
    }
    
    @objc func share() {
        articleWeb.evaluateJavaScript("get_selection_txt()", completionHandler: nil)
    }
    
    @objc func copyAction() {
        articleWeb.evaluateJavaScript("window.getSelection().toString()") { (object, error) in
            print(object!)
        }
    }


.這里實現了點擊方法,用到了上圖中前端定義好的方法。get_selection_txt(),get_selection()

3.細心的同學會發現,我有看到html往移動端發送數據啊。對。確實很多項目中很多情況下,都是我們調用前端方法,然后他們返回給我們數據我們再進行邏輯和處理。這里我們實現WKScriptMessageHandler這個代理方法,實現我們的需求。上代碼

image.png
extension ArticleDetialViewController: WKScriptMessageHandler{
    func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) {
        print(message.body)

    }
}

有興趣的同學,可以下載文章頂部的demo進行調試,打印print(message.body),里邊的數據即是前端傳遞給我們的數據。是不是很簡單呢

。OC版的如果小伙伴們有需要可以私信或者下方評論我會盡快出一個oc版的wkwebview交互

本文swift與WKWebView交互Demo地址

獻給所有和我一起奮斗在swift4學習路上的小伙伴

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,578評論 6 544
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,701評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,691評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,974評論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,694評論 6 413
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 56,026評論 1 329
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,015評論 3 450
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,193評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,719評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,442評論 3 360
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,668評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,151評論 5 365
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,846評論 3 351
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,255評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,592評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,394評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,635評論 2 380

推薦閱讀更多精彩內容