亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > iOS > 正文

WKWebView、WebView和JS的交互方式詳解

2019-10-21 18:41:20
字體:
來源:轉載
供稿:網友

由于Xcode8發布之后,編譯器開始不支持iOS 7了,這樣我們的app也改為最低支持iOS 8.0,既然需要與web交互,那自然也就選擇使用了 iOS 8.0之后 才推出的新控件 WKWebView.

相比與 UIWebView, WKWebView 存在很多優勢:

  • 支持更多的HTML5的特性
  • 高達60fps滾動刷新頻率與內置手勢
  • 與Safari相容的JavaScript引擎
  • 在性能、穩定性方面有很大提升占用內存更少 協議方法及功能都更細致
  • 可獲取加載進度等。

UIWebView與JS的交互方式

一,OC調用JS

直接調用蘋果提供的API

- (nullable NSString *)stringByEvaluatingJavaScriptFromString:(NSString *)script;

使用方式:

OC部分:

[self.webView stringByEvaluatingJavaScriptFromString:@"add(1,2)"];

 JS部分:

function add(a,b) { return a+b;}

二,JS調用OC

OC處理JS的時機在UIWebView的代理方法內

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType;

使用方式:

JS部分:

function btnClick1() { location.href = "jsCallBack://method_?param1¶m2"}

 OC部分:

NSString *schem = webView.request.URL.scheme; if ([schem containsString:@"jsCallBack://"]) { //action... return NO; }

WKWebView與JS的交互方式

一,OC調用JS

調用蘋果提供的API

- (void)evaluateJavaScript:(NSString *)javaScriptString completionHandler:(void (^ _Nullable)(_Nullable id, NSError * _Nullable error))completionHandler;

使用方式:

OC部分:

[self.wkWebView evaluateJavaScript:@"playSount()" completionHandler:nil];

 JS部分:

function playSount() { //playSount...}

二,JS調用OC

OC部分:

這種使用方式比較麻煩一些

1.在創建wkWebView時,需要將被js調用的方法注冊進去

//創建WKWebViewConfiguration文件 WKWebViewConfiguration *config = [[WKWebViewConfiguration alloc] init]; config.preferences.minimumFontSize = 10.f; [config.userContentController addScriptMessageHandler:self name:@"playSound"];//創建WKWebView類 WKWebView *webView = [[WKWebView alloc] initWithFrame:self.view.bounds configuration:config];

 2.在WKScriptMessageHandler代理方法中監聽js的調用

#pragma mark - WKScriptMessageHandler- (void)userContentController:(WKUserContentController *)userContentController didReceiveScriptMessage:(WKScriptMessage *)message {  if ([message.name isEqualToString:@"playSound"]) {  [self playSound]; }}

 JS部分:

//JS響應事件function btnClick() { window.webkit.messageHandlers.playSound.postMessage(null);}

利用JavaScriptCore庫,WebView與JS的交互

一,OC調用JS

self.jsContent = [[JSContext alloc] init]; NSString *js = @"function add(a,b) {return a + b}";[self.jsContent evaluateScript:js];JSValue *jsValue = [self.jsContent[@"add"] callWithArguments:@[@2,@3]];

二,JS調用OC

self.jsContent = [[JSContext alloc] init];self.jsContent[@"add"] = ^(int a, int b){ NSLog(@"a+b = %d",a+b);}; [self.jsContent evaluateScript:@"add(10,20)"];

三,JS直接訪問OC對象方法與屬性

1.首先定義一個協議,這個協議遵守JSExport協議

@protocol JSExportTest <JSExport>@property (nonatomic, assign) NSInteger sum;JSExportAs(add, - (NSInteger)add:(int)a b:(int)b); @end

其中JSExportAs()是系統提供的宏,用來聲明在JS環境中方法add與OC環境中方法- (NSInteger)add:(int)a b:(int)b對應。

2.創建一類,遵守JSExportTest協議,并實現它什么的方法與屬性

@interface JSProtolObj : NSObject <JSExportTest>@end@implementation JSProtolObj@synthesize sum = _sum;- (NSInteger)add:(int)a b:(int)b { return a+b;} - (void)setSum:(NSInteger)sum { _sum = sum;}@end

3.使用方式:

self.jsContent = [[JSContext alloc] init];self.jsContent.exceptionHandler = ^(JSContext *context, JSValue *exception) { [JSContext currentContext].exception = exception; NSLog(@"exception:%@",exception);}; self.jsContent[@"OCobj"] = self.jsProtolObj;[self.jsContent evaluateScript:@"OCobj.sum = OCobj.add(10,20)"];

這三種使用方式可以根據實際情況進行適當使用

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對VEVB武林網的支持。


注:相關教程知識閱讀請移步到IOS開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
一本色道久久88亚洲综合88| 亚洲女人被黑人巨大进入| 亚洲一区二区三区在线免费观看| 亚洲人成网站999久久久综合| 国产欧美一区二区三区在线看| 91精品视频一区| 国产男人精品视频| 亚洲男人7777| 国产日韩欧美电影在线观看| 欧美一级黄色网| 欧洲亚洲在线视频| 久久国产精品网站| 久久99精品国产99久久6尤物| 日本不卡免费高清视频| 国产精品扒开腿做爽爽爽视频| 亚洲激情免费观看| 岛国视频午夜一区免费在线观看| 奇米成人av国产一区二区三区| 欧美成人精品在线观看| 日韩美女视频在线观看| 成人黄色影片在线| 亚洲人成绝费网站色www| 搡老女人一区二区三区视频tv| 在线电影欧美日韩一区二区私密| 曰本色欧美视频在线| 久久97久久97精品免视看| 日韩在线观看免费全集电视剧网站| 亚洲性线免费观看视频成熟| 国产精品九九久久久久久久| 成人一区二区电影| 国产日产久久高清欧美一区| 亚洲国产婷婷香蕉久久久久久| 亚洲免费视频在线观看| 亚洲国产精品推荐| 亚洲女同性videos| 亚洲免费伊人电影在线观看av| 亚洲永久在线观看| 精品久久久久久中文字幕一区奶水| 美女扒开尿口让男人操亚洲视频网站| 亚洲精品白浆高清久久久久久| 亚洲色图色老头| 亚洲美女自拍视频| 国产噜噜噜噜久久久久久久久| 国产精品福利在线观看| 热99久久精品| 97国产精品免费视频| 欧美猛男性生活免费| 国产偷国产偷亚洲清高网站| 中文字幕欧美日韩在线| 欧美性生交大片免网| 51色欧美片视频在线观看| 日韩精品在线第一页| 91精品国产91久久久久久| 日本精品久久中文字幕佐佐木| 欧美视频免费在线| 中文字幕精品—区二区| 久久影视电视剧免费网站清宫辞电视| 91亚洲国产成人精品性色| 欧美电影在线观看网站| 欧美精品成人91久久久久久久| 97在线观看免费| 国产精品视频网址| 久久人91精品久久久久久不卡| 欧美激情视频在线| 国产在线视频一区| 日本高清不卡的在线| 亚洲第一区第一页| 午夜精品在线观看| 日韩av电影在线网| 欧美日韩视频免费播放| 一区二区三区亚洲| 国产91ⅴ在线精品免费观看| 国产v综合ⅴ日韩v欧美大片| 国产精品成人v| 久久天天躁日日躁| www欧美日韩| 久久人人爽亚洲精品天堂| 色噜噜久久综合伊人一本| 亚洲人成电影网站色…| xxx成人少妇69| 日韩69视频在线观看| xxxx性欧美| 91午夜理伦私人影院| 欧美久久精品午夜青青大伊人| 久久久久久久999| 亚洲国产日韩欧美在线图片| 久久人人爽人人爽人人片亚洲| 欧美丰满少妇xxxxx| 欧美性猛交xxxx富婆| 中文字幕日本欧美| 欧美激情视频一区二区三区不卡| 国产欧美日韩综合精品| 国产成人久久久| 伊人久久免费视频| 黑人巨大精品欧美一区二区免费| 久久国产精品电影| 成人性生交大片免费看小说| 日本精品一区二区三区在线播放视频| 国产精品劲爆视频| 97高清免费视频| 亚洲国产精品福利| 日韩欧美一区二区三区| 色无极影院亚洲| 亚洲国产另类久久精品| 欧美一区二区三区图| 亚洲第一中文字幕在线观看| 欧美一区二区大胆人体摄影专业网站| 一个人www欧美| 啪一啪鲁一鲁2019在线视频| 久久视频在线看| 91香蕉电影院| 国产欧美一区二区三区四区| 国产婷婷色综合av蜜臀av| 日韩在线观看免费| 日韩高清有码在线| 欧美丰满少妇xxxxx做受| 国产日韩在线播放| www.亚洲天堂| 国产精品精品视频一区二区三区| 成人福利免费观看| 亚洲欧美一区二区三区久久| 久久91亚洲精品中文字幕奶水| 日韩av片免费在线观看| 中文字幕在线亚洲| 国产一区二区欧美日韩| 亚洲精品v天堂中文字幕| 91亚洲国产成人久久精品网站| 亚洲欧美一区二区三区情侣bbw| 国产成人亚洲综合青青| 国产精品一区久久久| 亚洲欧美在线播放| 日韩在线观看免费av| 国内久久久精品| 精品久久久一区| 亚洲精品videossex少妇| 久久久精品网站| 欧洲一区二区视频| 国产精品久久久久秋霞鲁丝| 亚洲第一页自拍| 日韩欧美国产中文字幕| 日本一欧美一欧美一亚洲视频| 成人免费激情视频| 欧美做爰性生交视频| 国产欧美中文字幕| 精品福利免费观看| 欧美性色19p| 国产一区二区日韩精品欧美精品| 菠萝蜜影院一区二区免费| 精品视频偷偷看在线观看| 精品女同一区二区三区在线播放| 欧美自拍视频在线观看| 欧美在线观看视频| 久久久久久亚洲| 亚洲香蕉成人av网站在线观看| 欧美激情啊啊啊| 蜜臀久久99精品久久久无需会员| 亚洲成人av资源网| xxxxxxxxx欧美| 国产精品伦子伦免费视频| 中文在线资源观看视频网站免费不卡| 日韩网站在线观看| 日本久久久久久久久| 国产精品稀缺呦系列在线| 欧美另类极品videosbestfree|