博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS 与 JS 交互
阅读量:4120 次
发布时间:2019-05-25

本文共 1635 字,大约阅读时间需要 5 分钟。

1. 通过UIWebView与JS交互

    通过网页实现native和服务器的交互so easy.当然要实现webview的delegate.  self.webView.delegate = self;

1.1  iOS客户端调用JS的方法.

    直接使用系统的方法stringByEvaluatingJavaScriptFromString调用JS的方法即可.

    [_webView stringByEvaluatingJavaScriptFromString:@"smallfont()"]; 

   *注: smallfont()是JS的方法.

1.2 JS调用iOS的方法.

    相比于安卓,iOS 被调用的时候比较麻烦,因为安卓直接有可以被调用的方法,iOS比较矜持了,是不能直接被调用的偷笑

    1. 首先咱们要喝服务器端定义好方法和标示. 比如 自家的服务器定义的  js2ios://{"functionname":"buyNow","args":"88888888"}  意思就是我的参数中带js2ios,我要和你交互了.你给我实现buyNow的方法(functionname)我要使用参数(args)88888888打电话了.

    2. 由于iOS 只能在url重定向的时候实现被js调用,所以前提是我点网页上要交互的按钮之类的,要能跳进我的

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType 方法,如果不进,你就可以告诉服务器的小哥说;嗨,帅哥,你的代码可能有点问题可怜,前提是你自己确保实现了webview的delegate,也就是 self.webView.delegate = self;

   3. 现在就是我们在- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType 中拦截url了.

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {

    

    if ([request.URL.scheme isEqualToString:@"js2ios"]) {

        // decode

        NSString *decodeUrlStr1 = [request.URL.absoluteString stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

        NSString *decodeUrlStr;

        SEL selctor = NSSelectorFromString(截取到的方法名);

        IMP imp = [self methodForSelector:selctor];

        void (*func) (id,SEL) = (void *)imp;

        func(self,selctor);

//        [self performSelector:selctor withObject:nil];

//        此处直接调用注释的方法会有警告,可以参考:  我的这篇文章<>

//        当然这里如果不想加载特定的url,或者加载特定的url的时候要进行特殊的处理,可以在这里拦截

    }

    return YES;

}

2. 运行时交互

    努力学习中...

你可能感兴趣的文章
如何运行从网上下载的iWatch项目详细步骤.
查看>>
X-code7 beta error: warning: Is a directory
查看>>
Error: An App ID with identifier "*****" is not avaliable. Please enter a different string.
查看>>
X-code beta 开发iWatch项目,运行没有错误,但是某些操作一点就崩,而且找不错误的原因场景一
查看>>
Xcode 报错: Extra argument in call
查看>>
iTunes Connect 上传APP报错: Communication error. please use diagnostic mode to check connectivity.
查看>>
#import <Cocoa/Cocoa.h> 报错 Lexical or Preprocessor Issue 'Cocoa/Cocoa.h' file not found
查看>>
`MQTTClient (~> 0.2.6)` required by `Podfile`
查看>>
X-Code 报错 ld: library not found for -lAFNetworking
查看>>
Bitcode
查看>>
If you want to see the backtrace, please set CG_CONTEXT_SHOW_BACKTRACE environmental variable.
查看>>
宝石塔防3心得
查看>>
宝石塔防:如果还有人过不去1337,俺来发个详细点儿的攻略吧
查看>>
太经典的笑话
查看>>
男人不成熟十个标志
查看>>
IaaS PaaS SaaS三者之间界限正趋于模糊
查看>>
IaaS, PaaS和SaaS 区别
查看>>
2012年华为还将发布78款园区交换机,15款AR路由器,18款WLAN产品,7款数据中心交换
查看>>
数据中心融合下的SAN通信
查看>>
云计算数据中心网络的关键技术
查看>>