日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

混合开发之iOS快速集成DSBridge

發布時間:2023/12/13 综合教程 33 生活家
生活随笔 收集整理的這篇文章主要介紹了 混合开发之iOS快速集成DSBridge 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

DSBridge-IOS github:https://github.com/wendux/DSBridge-IOS

使用

Native 實現API 代理類

//JsApiTest.m 
@implementation JsApiTest
//for synchronous invocation  
- (NSString *) testSyn:(NSDictionary *) args
{
    return [(NSString *)[args valueForKey:@"msg"] stringByAppendingString:@"[ syn call]"];
}
//for asynchronous invocation
- (NSString *) testAsyn:(NSDictionary *) args :(void (^)(NSString * _Nullable result))handler
{
    handler([(NSString *)[args valueForKey:@"msg"] stringByAppendingString:@"[ asyn call]"]);
}
@end

2.注冊api代理類至DWebview

DWebview * webview=[[DWebview alloc] initWithFrame:bounds];
jsApi=[[JsApiTest alloc] init];
webview.JavascriptInterfaceObject=jsApi;

3.在Javascript中調用Native API

//Call Native API
var bridge = getJsBridge();
//Call synchronously 
var str=bridge.call("testSyn", {msg: "testSyn"});
//Call asynchronously
bridge.call("testAsyn", {msg: "testAsyn"}, function (v) {
 alert(v);
})

//Test will be called by oc, must be global function!
function test(arg1,arg2){
 return arg1+arg2;
}

4.最后,Native中調用Javascript API

[_webview callHandler:@"test"
  arguments:[[NSArray alloc] initWithObjects:@1,@"hello", nil]
  completionHandler:^(NSString *  value){
      NSLog(@"%@",value);
  }];

Javascript API 介紹

getJsBridge

獲取javascript bridge 對象;此方法為sdk內置,可在任何地方調用。

bridge.call(method,[args,callback])

功能:調用Native api

method: api函數名

args:參數,類型:json, 可選參數

callback(String returnValue): 處理調用結果的回調,僅異步調用時需要.

注意

Native API 方法簽名

為了在ios和android平臺下兼容,對IOS端Native API接口約定如下:

所有API返回值類型為NSString, 不存在時返回nil即可。
參數以JSON傳遞; DSBridge會將js參數自動轉化為NSDictionary

注:JsApiTest.m中實現的方法可以不在JsApiTest.h中聲明

調用Javascript

DWebView提供了兩個api用于調用js

//調用js api(函數)
-(void)callHandler:(NSString *)methodName arguments:(NSArray * _Nullable)args 
                   completionHandler:(void (^)(NSString * _Nullable))completionHandler;
//執行任意js代碼
- (void)evaluateJavaScript:(NSString *)javaScriptString 
                  completionHandler:(void (^ _Nullable)(NSString * _Nullable))completionHandler;

callHandler中,methodName 為js函數名,args為參數數組,可以接受數字、字符串等。

兩個函數中completionHandler為完成回調,用于獲取js執行的結果。

調用時機

DWebview只有在javascript context初始化成功后才能正確執行js代碼,而javascript context初始化完成的時機一般都比整個頁面加載完畢要早,隨然DSBridge能捕獲到javascript context初始化完成的時機,但是一些js api可能聲明在頁面尾部,甚至單獨的js文件中,如果在javascript context剛初始化完成就調用js api, 此時js api 可能還沒有加載,所以會失敗,為此專門提供了一個api設置一個回調,它會在頁面加載結束后調用,為了和didpagefinished區分,我們取名如下:

- (void)setJavascriptContextInitedListener:(void(^_Nullable)(void))callback;

若是端上主動調用js,請在此回調中進行 。示例如下:

__block DWebview * _webview=webview;
[webview setJavascriptContextInitedListener:^(){
  [_webview callHandler:@"test"
  arguments:[[NSArray alloc] initWithObjects:@1,@"hello", nil]
  completionHandler:^(NSString *  value){
      NSLog(@"%@",value);
  }];
}];

完整的示例請查看demo工程。

關于DWebview

SDK中有三個webview:

DWKwebview:繼承自WKWebView,內部已經實現js prompt、alert、confirm函數對應的對話框。

DUIwebview:繼承自UIWebView

DWebview:自定義view, 內部在ios8.0以下會使用DUIwebview, 大于等于8.0會使用DWKwebview。

所有的webview除了都實現了上述api之外,提供了一個加載網頁的便捷函數:

- (void)loadUrl: (NSString *) url;

您可以根據具體業務使用任意一個,不過一般情況下優先選用DWebview,它在新設備上更省資源,效率更高。

DWebview還提供了一些其它api和屬性,具體請查看其頭文件,需要特殊說明的是,有一個api:

- (id _Nullable) getXWebview;

它可以返回DWebview內部使用的真實webview, 值會是DUIwebview和DWKwebview的實例之一,您可以通過isKindOfClass來判斷,吃函數主要用于擴展DWebview,下面可以看一下loadRequest的大概實現:

- (void)loadRequest:(NSURLRequest *)request
{
      id webview=[self getXWebview];
    if([webview isKindOfClass:[DUIwebview class]]){
        [(DUIwebview *)webview loadRequest:request];
    }else{
        [(DWKwebview *)webview loadRequest:request];
    }
}

Alert dialog

DWebview已經實現 alert、prompt、comfirm對話框,您可以不做處理,也可以自定義。值得一提的是js 在調用alert函數正常情況下只要用戶沒有關閉alert對話框,js代碼是會阻塞的,但是考慮到alert 對話框只有一個確定按鈕,也就是說無論用戶關閉還是確定都不會影響js代碼流程,所以DWebview中在彈出alert對話框時會先給js返回,這樣一來js就可以繼續執行,而提示框等用戶關閉時在關閉即可。如果你就是想要阻塞的alert,可以自定義。而DWebview的prompt、comfirm實現完全符合ecma標準,都是阻塞的。

請不要手動設置DUIwebview的delegate屬性,因為DUIwebview在內部已經設置了該屬性,如果您需要自己處理頁面加載過程,請設置WebEventDelegate屬性。

總結

以上是生活随笔為你收集整理的混合开发之iOS快速集成DSBridge的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 麻豆乱码国产一区二区三区 | 欧美双性人妖o0 | 亚洲午夜精品一区二区三区 | 成人夜间视频 | 一级爱爱片 | 熟女高潮一区二区三区 | 日韩免费av片 | 亚洲黄色一区二区三区 | 中文字幕精品无码亚 | 一区二区三区黄色录像 | 夜夜爽夜夜爽 | 国产精品久久久久久亚洲色 | 亚洲福利国产 | 受虐m奴xxx在线观看 | 日本不卡免费在线 | 欧美狂猛xxxxx乱大交3 | 两个人做羞羞的视频 | 国产精品自拍视频 | 欧美日韩一区二区三区免费 | 污污在线免费观看 | 日本十八禁视频无遮挡 | 国产操 | 精品久久久中文字幕 | 淫五月| 亚洲精品国产99 | 国精产品一区一区三区mba下载 | 欧美成人国产精品高潮 | 国产在线观看免费视频软件 | 欧美韩国日本一区 | 国产18毛片| 麻豆免费av | 亚洲深夜| 欧美区二区三区 | 狼人精品一区二区三区在线 | 香港三级日本三级韩国三级 | 国产一级做a爰片久久毛片男 | 国产精品久久久久久久久久辛辛 | 亚洲免费av一区二区 | 国产色99 | 欧美另类综合 | 日韩激情电影在线 | 久久天天躁狠狠躁夜夜av | 亚洲砖区区免费 | 手机在线永久免费观看av片 | 九九九九精品九九九九 | 蜜桃久久久久久 | 亚洲GV成人无码久久精品 | 娇小激情hdxxxx学生 | 69亚洲乱人伦 | 日本成人动漫在线观看 | 草啪啪| 999久久久久久久久6666 | 伊人久久伊人 | 国产高清免费av | 叶山小百合av一区二区 | youjizz自拍| 久热最新 | 给我看高清的视频在线观看 | 国产精品五区 | 伊人三区 | 中文字幕在线免费看 | 日本一区二区三区精品 | 欧美色图88 | 大尺度做爰啪啪床戏 | 国产精品久久婷婷 | 神马午夜888 | 日韩bbw | 在线观看一区 | 美女成人在线 | 久久色视频 | 加勒比波多野结衣 | 精品在线视频播放 | 日韩黄色片在线观看 | 很黄的性视频 | 99re这里只有精品6 | 在线毛片观看 | 99在线无码精品入口 | 中文字幕11页中文字幕11页 | 8x8x最新网址| av东方在线 | 国产高清在线观看视频 | 国产精品69毛片高清亚洲 | 久久黄色网址 | 亚洲社区在线观看 | 国产精品久久久久91 | 四虎影院在线观看免费 | 波多野结av衣东京热无码专区 | 国产亚洲欧美精品久久久久久 | 好屌妞视频这里有精品 | 在线观看免费国产视频 | 欧美youjizz | 男人天堂欧美 | 午夜国产 | 青草成人免费视频 | 日韩精品第1页 | 大尺度摸揉捏胸床戏视频 | 午夜寂寞视频 | 欧美激情三区 | 亚洲精品www久久久久久广东 |