iOSUIWebview 与js交互

交互办法:

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

(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


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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容