美文网首页iOS收藏fish的iOS奔跑吧 iOS
最好用的跨平台Jsbridge新秀-DSBridge Ios篇

最好用的跨平台Jsbridge新秀-DSBridge Ios篇

作者: lazydu | 来源:发表于2017-01-03 18:53 被阅读5648次

DSBridge是一个现代,跨平台的IOS/Android jsbridge. 通过它你可以同步或异步的调用彼此的函数。

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

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

注意:目前DSBridge已经更新到了3.0,使用方法请查看项目主页,有中文文档,如果仍然需要使用2.0请到github上切换到2.0分支,查看2.0分支下的相应的文档,2.0和3.0不兼容,如果你是新用户,强烈建议使用3.0,如果你是老用户,或者仍然需要支持UIWebview,请使用2.0,本文文档已经太老,所以删除了,欢迎在github上讨论

相关文章

网友评论

  • iBlocker:用了你的框架 测试环境没什么问题 上了生产各种Crash 准备换框架了:joy:
    lazydu:@Cyandnow wkwebview是可以加载本地html的,demo就是加载的本地html
    pFruHMXB:@lazydu 是作者本人吗?我看3.0直接使用WebKit.放弃了WebView,然而WebKit无法加载本地HTML并携带参数
    lazydu:@iBlocker 现在很多线上APP都在用,你可以对照最新版本的文档看看使用方式是否正确,主要是:1.函数签名一定要正确 2.函数名不要以关键字或init开始(会和oc类中保留的名称冲突)。另外不建议再使用2.0
  • acabedb0628a:SXJsBridgeApi *api = [[SXJsBridgeApi alloc] init];
    _webView.JavascriptInterfaceObject = api;
    使用DUIWebview不能注册。js不能调用bridge的方法。
    lazydu:@lazydu 不过还是建议使用使用3.0,如果仍然要使用2.0,请参考https://github.com/wendux/DSBridge-IOS/tree/2.0
    lazydu:@霍根施拉格 2.0的话 dsbridge.js要使用2.0 版本
  • 西叶lv:OC代码调用JS方法总不成功,OC代码如下:
    __block DWKWebView* blockWebview= self.webView;
    [self.webView setJavascriptCloseWindowListener:^{
    NSLog(@"%@", blockWebview);
    [blockWebview callHandler:@"testMy" arguments:nil completionHandler:^(id _Nullable value) {
    NSLog(@"%@", value);
    }];
    }];

    html文件中的js方法如下:
    function testMy() {
    return "成功";
    }

    window.testMy= function(){
    return "成功";
    }
    西叶lv:@lazydu 安装的是3,html中也<script src="https://unpkg.com/dsbridge/dist/dsbridge.js";> </script>
    lazydu:@郝嘉律 1. 首先DSBridge已经升级到了3.0,请参考github最新文档 2.注意你dsbridge.js 版本是否是文档中描述的 3. setJavascriptCloseWindowListener 只有在网页引入dsbridge.js后,javascript中调用window.close后才会执行
    西叶lv:setJavascriptCloseWindowListener的blok并不执行
  • 西叶lv:OC异步API的格式“(void) handler(id arg, (void (^)( id result,BOOL complete))completionHandler)”,貌似是“- (void)asynHandler:(id)arg block:(void(^)(id result, BOOL complete))completionHandler;”的格式吧?GitHub的说明文档
  • _顺_1896:我的项目是集成UIWebView的,并且自己做了很多处理,现在不太可能修改集成DWebView,请问如果要使用DSJsBright必须使用DWebView吗?是否提供WebView的Category来实现DWebView功能,降低使用门槛?
  • 羊驼先生丶:请问如何解决h5加载慢得问题,相比WebViewJavascriptBridge要慢很多,如果dswebview是采用的wkwebview那应该会快一些的,WebViewJavascriptBridge我是使用的UIwebview。不论是安卓端还是ios端都是如此。
    羊驼先生丶:@lazydu 但是我们现在按照GitHub上写的。加载速度很慢。请问有什么优化吗?
    lazydu:@羊驼先生丶 android用的就是系统原生的webview, ios 支持使用wkwebview,参照github
  • 有一点lu:我自己写的dome没问题,但是放到项目中之后,H5页面中的注册var bridge = getJsBridge()方法,获取不到bridge,打印出来的bridge是undefined;
  • 440bd488f596:请问我想直接用DUIwebview,不知道IOS端要怎么注册?
    @property (nonatomic,strong) DUIwebview * uiweb;

    self.uiweb.JavascriptInterfaceObject = self; 为什么我这样不行
    lazydu: @440bd488f596 有问题,getXwebview返回的在9.0之后是wkwebview,之前才是uiwebview , 你可以直接使用DUIwebview, 而不是DWebvie
    440bd488f596:@lazydu 本来我们需求是要用WKWebview做登陆校验,直接传值到cookie请求过去,但是试了好几种方案都不行就换UIWebview做了,我是这么初始化的:
    CGRect rect = self.view.bounds;
    // rect.origin.y = 20;
    // rect.size.height -= 20;

    DWebview * web =[[DWebview alloc] initWithFrame:rect];
    DUIwebview * webview = [web getXWebview];
    webview.frame = rect;
    self.uiweb = webview;
    webview.JavascriptInterfaceObject = self;
    现在接口可以用·但是不知道是不是内存优化问题,加载页面交互的时候会崩溃,这个问题还没解决
    lazydu:就是这样的。你描述一下什么现象,然后检查一下uiweb是否初始化,self中实现的接口函数签名是否符合规范
  • TerryD:大神,可以指点下你怎么实现的js同步调用native代码的啊(while 循环?)?还有你代码里的_dsbridge(DWKwebview中)是在哪里初始化的啊,没看明白
  • 飞起来的大雨:你的那个demo 点击最后一个按钮 输入中文直接蹦了
    lazydu:@飞起来的小糖豆 我这边是正常的,你是最新的代码吗?你的环境是?可以在具体信息在github上issue里贴出来,这样有相似问题的都可以看见哦。

本文标题:最好用的跨平台Jsbridge新秀-DSBridge Ios篇

本文链接:https://www.haomeiwen.com/subject/zxynvttx.html