WKWebView使用以及JS交互

一、創(chuàng)建

WKWebViewConfiguration *config = [[WKWebViewConfiguration alloc] init];

//設(shè)置偏好設(shè)置

config.preferences = [[WKPreferencesalloc] init];

//默認(rèn)為0

config.preferences.minimumFontSize= 10;

//默認(rèn)認(rèn)為YES

config.preferences.javaScriptEnabled= YES;

//在iOS上默認(rèn)為NO,表示不能自動通過窗口打開

config.preferences.javaScriptCanOpenWindowsAutomatically= YES;

//打開網(wǎng)頁間的滑動返回

self.web.allowsBackForwardNavigationGestures=YES;

self.web=[[WKWebViewalloc]initWithFrame:CGRectMake(0, 60, WIDTH, HEIGHT-100) configuration:config];

二、WKNavigationDelegate代理

-?(void)webView:(WKWebView?*)webView?didStartProvisionalNavigation:(WKNavigation?*)navigation;

//當(dāng)內(nèi)容開始返回時調(diào)用

-?(void)webView:(WKWebView?*)webView?didCommitNavigation:(WKNavigation?*)navigation;

//頁面加載完成之后調(diào)用

-?(void)webView:(WKWebView?*)webView?didFinishNavigation:(WKNavigation?*)navigation;

//頁面加載失敗時調(diào)用

-?(void)webView:(WKWebView?*)webView?didFailProvisionalNavigation:(WKNavigation?*)navigation;

頁面跳轉(zhuǎn)的代理分三種:

-?(void)webView:(WKWebView?*)webView?didReceiveServerRedirectForProvisionalNavigation:(WKNavigation?*)navigation;

//在收到響應(yīng)后,決定是否跳轉(zhuǎn)

-?(void)webView:(WKWebView?*)webView?decidePolicyForNavigationResponse:(WKNavigationResponse?*)navigationResponse?decisionHandler:(void?(^)(WKNavigationResponsePolicy))decisionHandler;

//在發(fā)送請求之前,決定是否跳轉(zhuǎn)

-?(void)webView:(WKWebView?*)webView?decidePolicyForNavigationAction:(WKNavigationAction?*)navigationAction?decisionHandler:(void?(^)(WKNavigationActionPolicy))decisionHandler;

WKUIDelegate代理

*??web界面中有彈出警告框時調(diào)用

*??@param?webView實(shí)現(xiàn)該代理的webview

*??@param?message警告框中的內(nèi)容

*??@param?frame主窗口

*??@param?completionHandler警告框消失調(diào)用

-?(void)webView:(WKWebView?*)webView?runJavaScriptAlertPanelWithMessage:(NSString?*)message?initiatedByFrame:(void?(^)())completionHandler;

通過message獲取到JS發(fā)送過來的消息,一定要完成completionHandler()回調(diào),不然一直在崩潰

OC向JS傳值、調(diào)用JS方法

[self.web evaluateJavaScript:[NSString stringWithFormat:@"resultData('%@')",jsonstr]completionHandler:nil];

通過evaluateJavaScript方法,向JS注冊方法名以及傳值(傳值格式必須是JS的格式)

JS向OC傳值、調(diào)用JS方法

在初始化WKWebView時,通過configuration.userContentController的addScriptMessageHandler方法,傳入方法名(需要跟JS約定好同一個名字),方便調(diào)用。

[self.web.configuration.userContentControlleraddScriptMessageHandler:self name:@"closeMe"];

在WKScriptMessageHandler代理中根據(jù)之前約定好的方法名獲取參數(shù)

- (void)userContentController:(WKUserCon?tentController*)userContentController

didReceiveScriptMessage:(WKScriptMessage*)message {};

message.name與message.boby

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容