美文网首页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