iOS 与 JS 交互

来源:互联网 发布:电脑网络连接出现红叉 编辑:程序博客网 时间:2024/05/01 01:14

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.schemeisEqualToString:@"js2ios"]) {

        // decode

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

        NSString *decodeUrlStr;

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

        IMP imp = [selfmethodForSelector:selctor];

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

        func(self,selctor);

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

//        此处直接调用注释的方法会有警告,可以参考:  我的这篇文章<iOS PerformSelector may cause a leak because its selector is unknown>

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

    }

    returnYES;

}




2. 运行时交互

    努力学习中...

0 0
原创粉丝点击