IOS:Web App,Hybrid App,Native App之web:IOS和javaScript相互调用
2015-08-31 20:45
411 查看
文章来自:http://blog.csdn.net/intbird
相比android和js进行交互,ios和js进行交互是比较方便的;
1,oc调用js,超级方便,不论在代码中的任何位置,
只需调用stringByEvaluatingJavaScriptFromString即可
代码:
2,js调用oc,大题是拦截每个url,对指定的schema进行拦截做相应的本地方法
代码:
4,重要ViewController代码:
5:废话不多说了,直接上demo:
https://github.com/intbird/IOSIntbirdJsInterface
相比android和js进行交互,ios和js进行交互是比较方便的;
android和js进行交互,请看这里:
/article/7935491.htmlandroid和js进行交互框架,看这里:
/article/7935507.html这里看ios和javaScript的交互
0.上个丑图1,oc调用js,超级方便,不论在代码中的任何位置,
只需调用stringByEvaluatingJavaScriptFromString即可
代码:
- (IBAction)webDemo:(id)sender { NSString *name = [[UIDevice currentDevice]name]; NSString *js = [NSString stringWithFormat:@"showMessage('%@')",name]; [self.webView stringByEvaluatingJavaScriptFromString:js]; }
2,js调用oc,大题是拦截每个url,对指定的schema进行拦截做相应的本地方法
代码:
-(BOOL)webView:(nonnull UIWebView *)webView shouldStartLoadWithRequest:(nonnull NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType{ NSString * url = request.URL.absoluteString; if([url hasPrefix:@"intbird://"]){ NSString *urlConntet = [url substringFromIndex:@"intbird://".length]; NSArray *urlParams = [urlConntet componentsSeparatedByString:@"/"]; NSString* methodname = urlParams[0]; NSString* param = urlParams[1]; if([methodname isEqualToString:@"demoCallMethod"]){ [self performSelector:@selector(demoCallMethod:) withObject:param]; } //# pragma clang diagnostic ignored "-Warc-performSelector-leaks" //SEL method = NSSelectorFromString(methodname); //[self performSelector:method withObject:param]; return NO; } return YES; }
4,重要ViewController代码:
//
// ViewController.m
// IntbirdJsInterface
//
// Created by intbird on 15/8/31.
// Copyright © 2015年 intbird. All rights reserved.
//
#import "ViewController.h"
#import <JavaScriptCore/JavaScriptCore.h>
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
NSURL *url = [NSURL URLWithString:@"http://127.0.0.1"];
NSURLRequest* request= [NSURLRequest requestWithURL:url];
[_webView loadRequest:request];
_webView.delegate = self;
}
//oc 调用 js;
- (IBAction)webDemo:(id)sender { NSString *name = [[UIDevice currentDevice]name]; NSString *js = [NSString stringWithFormat:@"showMessage('%@')",name]; [self.webView stringByEvaluatingJavaScriptFromString:js]; }
//js 调用 oc;
-(BOOL)webView:(nonnull UIWebView *)webView shouldStartLoadWithRequest:(nonnull NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType{ NSString * url = request.URL.absoluteString; if([url hasPrefix:@"intbird://"]){ NSString *urlConntet = [url substringFromIndex:@"intbird://".length]; NSArray *urlParams = [urlConntet componentsSeparatedByString:@"/"]; NSString* methodname = urlParams[0]; NSString* param = urlParams[1]; if([methodname isEqualToString:@"demoCallMethod"]){ [self performSelector:@selector(demoCallMethod:) withObject:param]; } //# pragma clang diagnostic ignored "-Warc-performSelector-leaks" //SEL method = NSSelectorFromString(methodname); //[self performSelector:method withObject:param]; return NO; } return YES; }
-(void)demoCallMethod:(NSObject*)message{
UIAlertController * alert = [UIAlertController alertControllerWithTitle:@"demoCallMethod"
message:(NSString*)message
preferredStyle:UIAlertControllerStyleAlert];
UIAlertAction * alertCacel = [UIAlertAction actionWithTitle:@"Cacel"
style:UIAlertActionStyleCancel
handler:nil];
[alert addAction:alertCacel];
[ self presentViewController:alert animated:YES completion:nil];
}
-(void)webView:(nonnull UIWebView *)webView didFailLoadWithError:(nullable NSError *)error{
//JSContext *context = [webView valueForKey:@"documentView.webView.mainFrame.javaScriptContext"];
// NSString *alertStr = @"alert('alert called by oc')";
//[context evaluateScript:alertStr];
}
-(void)webViewDidFinishLoad:(nonnull UIWebView *)webView{
}
-(void)webViewDidStartLoad:(nonnull UIWebView *)webView{
}
-(void)webGoback:(id)sender{
if([_webView canGoBack]){
[_webView goBack];
}
}
-(void)webReload:(id)sender{
[_webView reload];
}
@end
5:废话不多说了,直接上demo:
https://github.com/intbird/IOSIntbirdJsInterface
相关文章推荐
- android studio一个module依赖另外一个module
- Function.prototype.bind、call与apply方法简介
- 0831Android基础自定义Notification+仿QQ聊天界面的小Demo(上)
- android 自定义View--漂亮的倒计时功能CountDownView
- Android 开发最佳实践
- Android 话筒、听筒、扬声器
- 微信中禁止长按复制的代码
- 关于Android中的输入法
- IOS 开发笔记——做日历开发的总结
- Android Drawable系列(1):自定义背景以及注意事项
- Android ViewPager禁止左右滑动以及点击选项卡切换闪烁的问题
- cp mnt/sda/sda1/XXX.apk system/app/把应用拷到设备启动崩溃
- android:configChanges属性
- ios MVC笔记
- Android触摸屏事件派发机制详解与源码分析一(View篇)
- IOS 字符串删除某一个字符
- 苹果开发 笔记(67)模态弹出和退出窗口
- Android--JNI错误解决方法
- Swift UILabel 文字大小随着宽度调整
- 关于JSONArray明明添加add JSONObject却为空