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

首頁 > 學院 > 開發設計 > 正文

史上最全的 UIWebview 的 JS 與 OC 交互

2019-11-06 10:03:47
字體:
來源:轉載
供稿:網友

其實一直想給大家整理一下JS與OC的交互,但是沒有合適的機會,今天借著微信小應用的發布,以及以后H5必定越來越流行,所以給大家整理一下.

交互方式有三種:

1.UIWebviewDelegate2.javaScriptCore3.WebViewJavascriptBridge按照排序給大家介紹一下,我推薦前兩種方法,第三種需要依賴第三方框架,并且不一定能攔截成功,所以著重介紹前兩種,第三種知道怎么操作就行了

1.UIWebviewDelegate

第一種也是最簡單的一種,我在實際項目中就用的這個方法,根據UIWebviewDelegate的代理方法進行攔截

1-(BOOL)webView:(UIWebView *)webViewshouldStartLoadWithRequest:(NSURLRequest *)requestnavigationType:(UIWebViewNavigationType)navigationType{

112146418-8f21b21f67038689

點擊新聞按鈕,根據shouldStartLoadWithRequest這個方法,打印出返回的url地址為

122146418-5e23f59008c47dd0

142146418-6830f8da432f5839

1234567891011-(BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)requestnavigationType:(UIWebViewNavigationType)navigationType{    NSString *requestStr= [request.URLabsoluteString];    NSLog(@"%@",requestStr);//判斷返回的url是否包含news這個字符串,如果有進入if判斷,進行攔截,如果沒有,則return YES,放行;    NSRangenewRange =[[requestStrlowercaseString]rangeOfString:@"news"];    if(newRange.length> 0){      //進行你需要的操作        returnNO;    }    returnYES;}

2.JavaScriptCore

這個是iOS7之后蘋果推出的一個JS于OC交互的一個框架,極大的方便了我們對js的操作

123456789101112131415161718192021相關的幾個類/*JS執行的環境,同時也通過JSVirtualMachine管理著所有對象的生命周期,每個JSValue都和JSContext相關聯并且強引用context。*/#import "JSContext.h"/*JS對象在JSVirtualMachine中的一個強引用,其實就是Hybird對象。我們對JS的操作都是通過它。并且每個JSValue都是強引用一個context。同時,OC和JS對象之間的轉換也是通過它*/#import "JSValue.h"/*JS和OC對象的內存管理輔助對象。由于JS內存管理是垃圾回收,并且JS中的對象都是強引用,而OC是引用計數。如果雙方相互引用,勢必會造成循環引用,而導致內存泄露。我們可以用JSManagedValue保存JSValue來避免。*/#import "JSManagedValue.h"/*JS運行的虛擬機,有獨立的堆空間和垃圾回收機制。*/#import "JSVirtualMachine.h"/*一個協議,如果JS對象想直接調用OC對象里面的方法和屬性,那么這個OC對象只要實現這個JSExport協議就可以了。*/#import "JSExport.h"

接下來就是如何去通過js來調用oc的方法了

1//首先你要在本地的html文件里注冊一個按鈕,按鈕的打擊名字jsButton

JavaScriptCore測試頁面

JavaScript
12345678910//首先你要在本地的html文件里注冊一個按鈕,按鈕的打擊名字jsButton<!DOCTYPEHTML><htmllang="zh-CN">  <body>    <p>JavaScriptCore測試頁面</p>     <body>    <buttononclick="jsButton()">JS按鈕</button>  </body></html>
12345678910111213141516//然后在加載完成的方法里通過JSContext來獲取相應操作的key值.key值是html文件里點擊方法的名字,并且調用你需要的操作- (void)webViewDidFinishLoad:(UIWebView *)webView{    JSContext *context= [self.webViewvalueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];    context[@"jsButton"]= ^{        //在這里調用你需要的操作        UIAlertController *alert= [UIAlertControlleralertControllerWithTitle:@"點擊了JS按鈕"message:@""preferredStyle:(UIAlertControllerStyleAlert)];        UIAlertAction *sureAlertAction= [UIAlertActionactionWithTitle:@"OK"style:(UIAlertActionStyleDefault)handler:^(UIAlertAction *_Nonnull action){         }];        [alertaddAction:sureAlertAction];        [selfpresentViewController:alertanimated:YEScompletion:^{         }];    }; }

3.WebViewJavascriptBridge

第三種方法是通過WebViewJavascriptBridge這個第三方庫,把js和oc之間搭建一個橋,來實現相互通信,這個是我最不推薦的一種方法,因為他需要依賴第三方庫來實現,通過互相注冊方法,增加代碼量并且并不是每次方法都能注冊上,有一定的失敗幾率,由于不推薦,所以就安排在最后,不做太詳細的解釋

3.1創建webview

1234567    UIWebView*webView =[[UIWebViewalloc]initWithFrame:self.view.bounds];    [self.viewaddSubview:webView];    NSString *path= [[NSBundlemainBundle]pathForResource:@"JSBridge"ofType:@"html"];    NSURL *baseURL= [NSURLfileURLWithPath:[[NSBundlemainBundle]bundlePath]];    NSString *htmlString= [NSStringstringWithContentsOfFile:pathencoding:NSUTF8StringEncodingerror:nil];    [webViewloadHTMLString:htmlStringbaseURL:baseURL];    [self.viewaddSubview:webView];

3.2創建WebViewJavascriptBridge

123[WebViewJavascriptBridgeenableLogging];_bridge =[WebViewJavascriptBridgebridgeForWebView:webView];[_bridgesetWebViewDelegate:self];

3.3注冊js要調用Native

123//handlerName:需要調用js的名字//handler:需要oc進行的操作-(void)registerHandler:(NSString *)handlerNamehandler:(WVJBHandler)handler{
1234567891011[_bridgeregisterHandler:@"scanClick"handler:^(iddata,WVJBResponseCallback responseCallback){        //需要進行的操作        UIAlertController *alert= [UIAlertControlleralertControllerWithTitle:@"點擊了按鈕"message:@""preferredStyle:(UIAlertControllerStyleAlert)];        UIAlertAction *sureAlertAction= [UIAlertActionactionWithTitle:@"OK"style:(UIAlertActionStyleDefault)handler:^(UIAlertAction *_Nonnull action){         }];        [alertaddAction:sureAlertAction];        [selfpresentViewController:alertanimated:YEScompletion:^{         }];    }];

demo地址


上一篇:Swift 3.0 新特性

下一篇:xcode調試html頁面

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲一区制服诱惑| 欧美二区乱c黑人| 亚洲va欧美va在线观看| 国产精品色午夜在线观看| 97国产精品视频| 韩曰欧美视频免费观看| 国产精品美女在线| 国产成人精品日本亚洲| 精品国产乱码久久久久久天美| 草民午夜欧美限制a级福利片| 日韩三级成人av网| 欧美床上激情在线观看| 91精品国产91久久久久久吃药| 成人妇女淫片aaaa视频| 韩国19禁主播vip福利视频| 国产精品视频网| 欧美激情国产精品| 欧美成人精品在线播放| 欧美色图在线视频| 欧美成人免费小视频| 亚洲精品美女久久| 日韩国产激情在线| 亚洲精品国产福利| 欧美极品在线播放| 91在线高清免费观看| 亚洲视频欧美视频| 日韩精品极品在线观看播放免费视频| 91精品国产自产91精品| 国产一区私人高清影院| 欧美激情久久久| 成人精品视频99在线观看免费| 在线观看日韩www视频免费| 日韩一级黄色av| 久久久av网站| 亚洲区一区二区| 国内精品久久久久久影视8| 高清在线视频日韩欧美| www.亚洲天堂| 国产精品99久久久久久久久久久久| 午夜精品理论片| 中文字幕在线看视频国产欧美在线看完整| 欧美日韩一区二区在线播放| 亚洲女人天堂色在线7777| 欧美电影在线观看完整版| 久久久精品免费视频| 国产做受69高潮| www.欧美视频| 日韩精品丝袜在线| 中文字幕久久久av一区| 国产精品久久久久久婷婷天堂| 久久精品色欧美aⅴ一区二区| 午夜精品视频网站| 中文字幕欧美亚洲| 亚洲热线99精品视频| 91精品国产色综合| 国产精品视频一区国模私拍| 在线观看精品国产视频| 久久亚洲精品中文字幕冲田杏梨| 欧美乱大交xxxxx另类电影| 中国人与牲禽动交精品| 欧洲亚洲免费视频| 亚洲精品日韩在线| 欧美性视频在线| 国产成人亚洲综合| 午夜精品99久久免费| 日韩在线观看网址| 亚洲小视频在线| 国产欧美欧洲在线观看| 国产精品一久久香蕉国产线看观看| 亚洲aa在线观看| 日本久久久久久| 最新69国产成人精品视频免费| 色综合久久久久久中文网| 亚洲精品aⅴ中文字幕乱码| 色婷婷成人综合| 欧美精品生活片| 成人h猎奇视频网站| 日韩经典一区二区三区| 91精品久久久久久综合乱菊| 久久久最新网址| 韩国19禁主播vip福利视频| 国产精品久久久久久久久| 538国产精品视频一区二区| 最近2019免费中文字幕视频三| 国产成人精品视频在线观看| 久久久免费在线观看| 最近中文字幕mv在线一区二区三区四区| 日韩免费在线视频| 久久精品成人一区二区三区| 久久成人精品视频| 91精品一区二区| 国产日本欧美一区二区三区| 亚洲成人av资源网| 在线看日韩av| www.欧美精品| 日韩欧美在线视频日韩欧美在线视频| 亚洲xxxxx电影| 亚洲bt欧美bt日本bt| 精品久久在线播放| 欧美日韩在线一区| 欧美激情第三页| 一区二区国产精品视频| 久久综合伊人77777蜜臀| 欧美一区三区三区高中清蜜桃| 久久免费视频在线观看| 久久99精品国产99久久6尤物| 日韩在线视频免费观看高清中文| 精品人伦一区二区三区蜜桃网站| 这里只有精品在线观看| 91tv亚洲精品香蕉国产一区7ujn| 影音先锋日韩有码| 日韩在线视频播放| 欧美国产精品人人做人人爱| 日本韩国欧美精品大片卡二| 激情成人中文字幕| 成人黄色激情网| 亚洲毛茸茸少妇高潮呻吟| 日韩在线观看成人| 久久99精品久久久久久噜噜| 国产成人久久久精品一区| 亚洲欧美日韩国产精品| 亚洲免费av片| 日韩精品视频免费| 另类专区欧美制服同性| 久久九九有精品国产23| 欧美成人一二三| 久久九九亚洲综合| 亚洲欧美国内爽妇网| 亚洲女人被黑人巨大进入al| 国产裸体写真av一区二区| 疯狂做受xxxx高潮欧美日本| 欧美日韩中国免费专区在线看| 岛国av午夜精品| 欧美性开放视频| 亚洲国产第一页| 久久精品视频在线播放| 亲爱的老师9免费观看全集电视剧| 在线亚洲午夜片av大片| 欧美猛男性生活免费| 国产精品福利在线| 成人看片人aa| 精品偷拍各种wc美女嘘嘘| 成人网欧美在线视频| 久久激情五月丁香伊人| 欧美性猛交xxxx富婆弯腰| 欧美视频中文字幕在线| 精品一区二区三区四区| 国产精品久久久久久久久免费| 欧美成人精品在线| 26uuu另类亚洲欧美日本老年| 成人福利在线观看| 亚洲已满18点击进入在线看片| 国产精品视频26uuu| 91精品久久久久久综合乱菊| 久久精品精品电影网| 精品无人区乱码1区2区3区在线| 亚洲大胆人体av| 成人情趣片在线观看免费| 亚洲r级在线观看| 亚洲国模精品一区| 久久中文字幕在线| 欧美片一区二区三区| 国产精品福利无圣光在线一区| 国产精品高潮呻吟久久av野狼|