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

首頁 > 系統 > iOS > 正文

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

2020-07-26 02:28:51
字體:
來源:轉載
供稿:網友

由于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&param2"}

 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)"];

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

總結

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲精品成人久久久| 欧美激情中文字幕乱码免费| 亚洲欧美在线免费观看| 日韩精品中文字幕视频在线| 国产精品视频yy9099| 亚洲国产精彩中文乱码av| 亚洲国产又黄又爽女人高潮的| 欧美人与性动交a欧美精品| 91禁外国网站| 96pao国产成视频永久免费| 亚洲欧美日韩综合| 97色在线视频观看| 人人做人人澡人人爽欧美| 亚洲全黄一级网站| 国产精品自拍偷拍| 亚洲欧美在线磁力| 在线午夜精品自拍| 久久天天躁日日躁| 美女视频久久黄| y97精品国产97久久久久久| 欧美剧在线观看| 中文字幕亚洲自拍| 国产精品久久久久久久久久久不卡| 欧美成人国产va精品日本一级| 亚洲电影第1页| 欧美色欧美亚洲高清在线视频| 精品久久久视频| 国产精品成人一区二区三区吃奶| 国产视频精品久久久| 亚洲无线码在线一区观看| 亚洲综合小说区| 国产精品成人aaaaa网站| 久久久伊人日本| 国产小视频国产精品| www.久久色.com| 国模精品一区二区三区色天香| 亚洲人午夜色婷婷| 日韩欧美主播在线| 97超碰蝌蚪网人人做人人爽| 亚洲国产精品成人va在线观看| 欧美激情免费在线| 91在线观看免费高清| 免费成人高清视频| 亚洲一区久久久| 国产精品成人国产乱一区| 欧美激情第6页| 国产成人在线精品| 亚洲成人黄色网| 国产在线观看91精品一区| 欧美成人午夜视频| 日韩欧美黄色动漫| 97视频在线观看免费高清完整版在线观看| 亚洲天堂av女优| 亚洲人午夜精品免费| 久久精品成人欧美大片| 国内精品久久久久伊人av| 国产精品稀缺呦系列在线| 69视频在线免费观看| 91丨九色丨国产在线| 欧美电影第一页| 精品久久久一区二区| 欧美大尺度激情区在线播放| 日韩精品有码在线观看| 伊人一区二区三区久久精品| 91黄色8090| 欧洲成人免费视频| 日韩电视剧免费观看网站| 在线日韩中文字幕| 欧美一级视频在线观看| 成人免费在线视频网址| 中文字幕免费精品一区高清| 久久精品91久久久久久再现| 国产精品亚洲网站| 欧美在线国产精品| 久久精品免费播放| 97精品一区二区视频在线观看| 亚洲自拍在线观看| 久久久久久久久中文字幕| 亚洲一级黄色av| 国产精品igao视频| 亚洲黄色在线观看| 黄色成人在线免费| 欧美最猛性xxxx| 亚洲精品456在线播放狼人| 欧美高跟鞋交xxxxhd| 亚洲国产成人一区| 亚洲国产欧美久久| 国产成人精品综合久久久| 丝袜美腿精品国产二区| 成人国产精品免费视频| 国产成人亚洲精品| 久久亚洲国产成人| 在线电影中文日韩| 久久久久久久久久国产精品| 高清欧美一区二区三区| 国产在线视频不卡| 亚洲自拍高清视频网站| 精品日韩视频在线观看| 欧美黑人一区二区三区| 亚洲最大激情中文字幕| 琪琪亚洲精品午夜在线| 亚洲精品一二区| 奇米影视亚洲狠狠色| 91久久国产婷婷一区二区| 欧美激情在线视频二区| 欧美xxxx做受欧美.88| 亚洲综合大片69999| 欧美成人亚洲成人| 国产精品丝袜久久久久久不卡| 自拍偷拍免费精品| 成人有码在线播放| 日韩国产激情在线| 日韩成人中文电影| 国产免费亚洲高清| 福利微拍一区二区| 91精品国产免费久久久久久| 欧美黄色片视频| 精品久久久久久中文字幕| 555www成人网| 亚洲成人精品视频在线观看| 成人黄色午夜影院| 亚洲国产99精品国自产| 亚洲国产天堂久久国产91| 国产男女猛烈无遮挡91| 欧美黑人巨大精品一区二区| 日本高清视频一区| 97精品视频在线播放| 亚洲97在线观看| 少妇精69xxtheporn| 欧美福利在线观看| 精品中文字幕视频| 超碰91人人草人人干| 精品国产网站地址| 日韩经典中文字幕在线观看| 亚洲一区二区中文| 亚洲人成绝费网站色www| 欧美精品18videosex性欧美| 成人黄色av免费在线观看| 欧美国产激情18| 夜夜狂射影院欧美极品| 久久精品国产亚洲7777| 97在线视频免费| 欧美老少做受xxxx高潮| 亚洲最新av在线网站| 欧美精品激情blacked18| 欧美成人免费全部| 色诱女教师一区二区三区| 久久99久久99精品中文字幕| 日韩精品黄色网| 国产一级揄自揄精品视频| 欧美激情综合色| 一区二区欧美亚洲| 国产精品第三页| 亚洲国模精品私拍| 日韩视频免费在线| 亚洲精品第一页| 亚洲天堂av网| 亚洲a∨日韩av高清在线观看| 久久这里只有精品99| 国内外成人免费激情在线视频网站| 亚洲美女av电影| 亚洲人成网7777777国产| 亚洲国产成人在线视频| 亚洲美女视频网站|