WKWebView與JS互動詳情.
上一篇博文《WebKit(展示Web介面)》講解了顯示Web頁面,這一篇博文將講解使用WKScriptMessageHandler完成JS互動。
在WKWebView中OC和JS互動也非常簡單,WebKit庫中有個代理WKScriptMessageHandler就是專門來做互動的。
1 WKScriptMessageHandler
1.1 WKScriptMessageHandler協議
WKScriptMessageHandler其實就是一個遵循的協議,它能讓網頁通過JS把訊息傳送給OC。其中協議方法。
- 1
- 2
- 3
- 4
- 5
- 6
從協議中我們可以看出這裡使用了兩個類WKUserContentController和WKScriptMessage。WKUserContentController可以理解為排程器,WKScriptMessage則是攜帶的資料。
1.2 WKUserContentController
WKUserContentController有兩個核心方法,也是它的核心功能。
- (void)addUserScript:(WKUserScript *)userScript;
: js注入,即向網頁中注入我們的js方法,這是一個非常強大的功能,開發中要慎用。- (void)addScriptMessageHandler:(id <WKScriptMessageHandler>)scriptMessageHandler name:(NSString *)name;
:新增供js呼叫oc的橋樑。這裡的name對應WKScriptMessage中的name,多數情況下我們認為它就是方法名。
1.3 WKScriptMessage
WKScriptMessage就是js通知oc的資料。其中有兩個核心屬性用的很多。
@property (nonatomic, readonly, copy) NSString *name;
:對應- (void)addScriptMessageHandler:(id <WKScriptMessageHandler>)scriptMessageHandler name:(NSString *)name;
新增的name。@property (nonatomic, readonly, copy) id body;
:攜帶的核心資料。
js呼叫時只需
- 1
這裡的name就是我們新增的name,是不是感覺很爽,就是這麼簡單,下面我們就來具體實現。
2 JS呼叫OC
2.1 配置WKUserContentController
要想使用WKUserContentController為web頁面新增橋樑,只需配置到WKWebViewConfiguration即可。
下面改造webView方法。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
2.2 實現WKScriptMessageHandler
在當前頁面引入WKScriptMessageHandler,並實現WKScriptMessageHandler協議即可。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
2.3 改造index.html頁面
修改index.html的onClickButton()方法。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
這裡我們為了測試效果傳入了一個複雜的字典資料,而且字典中還有陣列。input.value代表使用者輸入的資料。
這裡使用了window.webkit.messageHandlers.jsCallOC.postMessage(dict);
通知oc,jsCallOC這個屬性就是前面我們通過WKUserContentController注入的。
2.4 測試互動
我們在viewDidLoad使用index.html頁面完成測試。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
執行專案後,在頁面的輸入框中輸入相應資訊,點選確定按鈕。即可在xcode中看見相關列印資訊。
3 OC呼叫JS
3.1 OC通知JS
oc呼叫js就特別簡單了,只需WKWebView呼叫- (void)evaluateJavaScript:(NSString *)javaScriptString completionHandler:(void (^ __nullable)(__nullable id, NSError * __nullable error))completionHandler;
方法即可。
在上面的列印資訊中,我們會發現我們還沒有實現jsCallOC:方法,接下來我們在jsCallOC:方法中實現通知JS,並將使用者輸入的資訊傳送給JS。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
3.2 JS響應
OC將通知傳送給JS後,JS要響應這個ocCallJS方法。我們在index.html中的onClickButton()方法下新增ocCallJS方法。
- 1
- 2
- 3
- 4
執行專案,在輸入框輸入資訊後,點選確定按鈕,會發現輸入的資訊在輸入框下面顯示出來。如圖所示。
並在控制檯看見如下列印資訊。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
4 WKUserScript JS注入
4.1 WKUserScript核心方法
在WebKit框架中,我們還可以預先新增JS方法,供其他人員呼叫。WKUserScript就是幫助我們完成JS注入的類,它能幫助我們在頁面填充前或js填充完成後呼叫。核心方法。
- 1
- 2
- 3
- 4
- 5
- 6
4.2 WKUserScriptInjectionTime列舉
在WKUserScriptInjectionTime列舉中有兩個狀態。
- WKUserScriptInjectionTimeAtDocumentStart:js載入前執行。
- WKUserScriptInjectionTimeAtDocumentEnd:js載入後執行。
4.3 js注入
WKUserScript的執行需依託WKUserContentController,接下來我們就為WKWebView注入一個js執行完畢後執行的alert方法。
改造- (WKWebView *)webView
方法。
相關推薦
WKWebView與JS互動詳情.
上一篇博文《WebKit(展示Web介面)》講解了顯示Web頁面,這一篇博文將講解使用WKScriptMessageHandler完成JS互動。在WKWebView中OC和JS互動也非常簡單,WebKit庫中有個代理WKScriptMessageHandler就是專門來做互動的。1 WKScriptMessa
Android筆記之 Webview與Js互動-詳情舉例
Android呼叫網頁自身Js 你好! 這是你第一次使用 Markdown編輯器 所展示的歡迎頁。如果你想學習如何使用Markdown編輯器, 可以仔細閱讀這篇文章,瞭解一下Markdown的基本語法知識。 本地(asset)網頁androidcalljs.h
WKWebView與js互動
接手新的專案,直接就放棄了iOS8以下的使用者.想想也是醉了.那麼小白帶你怎麼玩轉WKWebView. 首先點進去看API,好到此結束了.那我下面就不用寫了.其實網上有很多相關的WEWebVi
WKWebView 與 JS 互動簡單使用
通過調研,我決定使用WKWebView替換原來的UIWebView。 遇到的第一個問題就是WKWebView無法在我喜愛的xib上設定,通過翻牆搜尋資料,原來WKWebView沒有實現initWithCoder方法,自然也就找到了解決辦法: 自定義一個M
WKWebView與JS互動之實戰技巧介紹
前言 效果圖 通過本篇文章,至少可以學習到: OC如何給JS注入物件及JS如何給IOS傳送資料 JS呼叫alert、confirm、prompt時,不採用JS原生提示,而是使用iOS原生來實現 如何監聽web內容載入進度、是否載入完成 如何
Swift WKWebView(二):iOS與js互動
在上一篇中我們介紹了Swift下WKWebView的基本使用方法,下面總結一下iOS與js互動的實現,最終的頁面效果如下圖所示: 其中,js有關程式碼如下: function navButtonAction(name,age){
Swift 使用WKWebView 實現Swift 與JS 互動
功能一:刪除京東手機版https://m.jd.com/右上角的登陸按鈕 程式碼如下 import UIKit import WebKit class ViewController2: UIViewController,WKNavigationDelegate { @IBOutlet w
iOS 開發 Object-C和JavaScript互動詳解之OC與JS互動在WKWebView中使用
1.OC與JS互動在UIWebView中使用 2. WKWebView的使用詳解 3.OC與JS互動在WKWebView中使用 // // ViewController.m // oc與js互動WKWebView // // Cr
iOS與js互動(WebView+WKWebView)
需求:1點選js登入按鈕將使用者賬號和密碼傳給移動端 2將客戶端的token傳給html端 據我瞭解有以下幾種方法 1:webview的javascriptCore 2:webkit 3:url攔截 4:第三方庫 我用的是1和2
WKWebView上JS互動與載入CSS樣式(Hybrid混合開發)
首先,我們需要準備一篇帶有互動指令碼的HTML <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
duilib CWebBrowser控制元件 cxx與js互動
轉自:http://blog.csdn.net/sunflover454/article/details/60873557(侵刪) C++和js相互呼叫是個有意思的事情。 一、js中呼叫C++函式。函式原型 [html] view plain
iOS與JS互動的4種方法
iOS與JS互動的方法: 1.攔截url(適用於UIWebView和WKWebView) 2.JavaScriptCore(只適用於UIWebView,iOS7+) 3.WKScriptMessageHandler(只適用於WKWebView,iOS8+) 4.WebViewJ
OC與JS互動 初體會
第一篇部落格,有點小緊張、小期待,會不會有人看?有也好,沒有也罷,權當自己圖個樂兒,記錄近來學到的知識。閒話少說,進入正題! OC與JS互動的方式:1、使用UIWebView通過攔截Request完成JS調取OC,通過stringByEvaluatingJavaScriptFromString注入JS函式或
Android開發之Webview中原生與JS互動
文章目錄 概述 使用場景 互動方式 Java呼叫JS程式碼 JS呼叫Java程式碼 總結 概述 由於手機硬體資源的快速提升,使得采用混合開發的可能性逐漸成為現實並且流行起來。Android開發中
WKWebView與H5互動的兩種方式
互動方式一:原生互動(以WKWebView為栗子) 1.原生呼叫H5方法 [wkWebView evaluateJavaScript:@"js方法名" completionHandler:^(id _Nullable response, NSError * _Nullable err
使用WebViewJavascriptBridge實現OC與JS互動
陳向陽哈 關注 2015.09.29 15:36* 最後編輯於 2015.10.13 09:44 字數 146
目前iOS與JS互動的方法選擇比對
只是針對目前存在的互動方式做個比對。不會涉及任何實現。如需知道具體的使用。可自行baidu或者Google。 攔截協議 攔截協議是最簡單的互動方式,在Android端和iOS端直接攔截,可以統一web前端的程式碼。web前端通過在連結中帶上引數。比如: 88gongxiang:
OC與JS互動之JavaScriptCore
JavaScriptCore初探 在iOS7之前,原生應用和Web應用之間很難通訊。如果你想在iOS裝置上渲染HTML或者執行JavaScript,你不得不使用UIWebView。iOS7引入了JavaScriptCore,功能更強大,使用更簡單。 ###JavaScriptCore
Android之webView與js互動
一、java呼叫js操作: 1.佈局檔案: <WebView android:id="@+id/web" android:layout_width="match_parent" android:layout_height="mat
安卓混淆之後,android與js互動異常原因
解決方案:需要js互動程式碼不被混淆掉,加入以下程式碼即可 -keepclassmembers class com.taohaohuo365.taohaohuo.activity.H5Activity$AndroidAndJSInterface { public *; } -keepcla