美文网首页
iOSUIWebview 与js交互

iOSUIWebview 与js交互

作者: 蓝摇扼剑 | 来源:发表于2016-04-08 10:01 被阅读84次

    交互办法:

    方案一.使用系统的最原生的交互:

    (1)js 调用原生的方法:

    思路:网页的每次请求都是一次request ,在webView中有一个代理方法- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType;可以拦截请求的东西。

    本人对js了解不太深所以js代码就不贴了。算了还是找到了贴一下,

    #pragma mark ****这部分代码是html中的 js代码

    var btn = document.getElementById('upload'); // 获取叫upload的按钮

    var nativeBridage = { // 这个应该是和webView的桥梁吧,不太懂的样子。

    invoke: function (commandName) {

    console.log(commandName);

    window.location = 'js-call:' + commandName ;// 这js-call 是我们能够截获到的事件嗯,就是他了。

    }

    };

    btn.addEventListener("click", function() {// 这个是为按钮增加绑定点击事件

    console.log("Cliked");// 打印。。。

    if (window.android) { // 这个是安卓的方法,安卓的方法好像能直接调用,好厉害的样子

    console.log("Has Android");

    android.test();

    } else {// 这个代码就是我们iOS的了,不是安卓就是iOS,你把winPhone放哪了?别问我也不知道。

    nativeBridage.invoke('test');

    }

    });

    #pragma mark ****这部分代码是我们OC中的代码了

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

    //获取他的请求路径

    NSString *requestURLString = [[request URL] absoluteString];

    //  判断是否有这个js-call

    if ([requestURLString hasPrefix:@"js-call:"]) {

    //  接下来是判断command的名字和JSON参数字符串:

    #warning js-call 后面是个数组,

    NSArray *components = [requestURLString componentsSeparatedByString:@":"];

    //  命令名字

    NSString *commandName = (NSString*)[components objectAtIndex:0];

    NSLog(@"components %@ %@ ",components,commandName); // 打印看看

    if([commandName isEqualToString:@"test"]){ // 判断名字是什么执行相应的操作

    NSLog(@"做任何你想做的事情(使用self的时候用weakSelf比较好,据说是因为js会强引用oc的东西。)");

    return NO;// 最好返回NO,不然会出现一些奇怪的事情。

    }

    }

    return YES;

    }

    (2)oc调用js 

    这个就没什么好写的了,

    做网页的会给你一个js函数名func,直接使用下面的方法就可以了

    [self.webView stringByEvaluatingJavaScriptFromString:func];

    例如本人遇到的是传参的函数

    她给我的函数名是:window.myApp.services.cameraHandler(error,string);// 没错,他给我的就是这个,通常不是什么test();之类的么。

    然后就拼接一下就行了,对了这个是要传参数的

    第一个参数顾名思义是错误,开玩笑,我怎么会有错误,不传,(注意可以不传,他们那边就是null,你要是穿个null 或者nil ,他们那边不是null,我也不懂是不是这样,但是我做的时候就是这样啊!)

    第二个参数是要传一些值:就传一个字符串吧@“silly boy!”

    NSString *pathStr =@“silly boy!”;

    //将参数拼接到js函数中

    NSString *path = [NSString stringWithFormat:@"window.myApp.services.cameraHandler('','%@');",pathStr];

    // 执行js代码

    [self.webView stringByEvaluatingJavaScriptFromString:path];

    End

    二。使用第三方WebViewJavascriptBridge

    (https://github.com/marcuswestin/WebViewJavascriptBridge)

    第三方的还是自己研究吧,我就不多写了。(好吧我承认我是没用过)

    *在iOS / OSX的桥梁,为在UIWebViews / WebViews的OBJ-C与JavaScript之间发送消息**很多人在用(哇咔咔),本人项目小用原生的就行了。

    三。iOS7里的JavaScriptCore framework

    使用这个,还是自行百度吧,网上一大堆代码。可以参考这个:http://justsee.iteye.com/blog/2036713

    四。iOS8WKWebView

    给个链接自己看吧,有好的告诉我,我也看看。

    https://lvwenhan.com/ios/460.html

    本人是菜鸟,如有错误请指正,欢迎交流。

    相关文章

      网友评论

          本文标题:iOSUIWebview 与js交互

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