您的位置:首页 > 移动开发

Webview与原生交互传值

2016-05-11 16:48 267 查看
UIWebView *webView = [[UIWebView alloc]initWithFrame:CGRectMake(0,0, MainScreenWidth,MainScreenHeight)];
WebView = webView;
WebView.backgroundColor = [UIColor whiteColor];
WebView.delegate = self;
[WebView setScalesPageToFit:YES];
[self.view addSubview:WebView];
</pre><pre code_snippet_id="1679353" snippet_file_name="blog_20160511_3_4775449" name="code" class="objc"><pre name="code" class="objc">#pragma mark    调用内嵌H5页面-绝对路劲
<pre name="code" class="objc">//  NSString *filePath = [[NSBundle mainBundle]pathForResource:@"index" ofType:@"html"];
</pre><pre code_snippet_id="1679353" snippet_file_name="blog_20160511_6_2725325" name="code" class="objc">#pragma mark    调用url加载h5页面

NSString *filePath = [NSString stringWithFormat:@"%@videoApp/video/index.html",HTTP_BASE_URL];
filePath = [filePath stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

NSURL * url = [NSURL URLWithString:filePath];

NSURLRequest *request = [NSURLRequest requestWithURL:url];

[webView loadRequest:request];
<pre name="code" class="objc">#pragma mark    调用内嵌H5页面-相对路劲
</pre> http://www.wjxfpf.com/2015/10/800136.html <pre>
http://blog.csdn.net/mangosnow/article/details/36879725
当APP打包的时候,它将所有资源文件平行的放到根目录中,这个包就是(NSBundle mainBundle),也就是说文件全局中不允许重名文件存在(目录引用除外,下面会讲到)。>一般为了在包中引用其它前端人员的Html 包,而不想改动内容中的资源路径(比如img,css,js等),在这里,我找到一个办法;当在APP中引用一个web html包的时候,我们应该以实际目录的形式<这个时候(Project Navigator)目录将是蓝色文件夹,html 保证是相对的目录引用>废话不多说,上代码:// [webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"html5-css3-404-animation/index.html" relativeToURL:[[NSBundle mainBundle] bundleURL]]]];
获取html标题:[WebViewstringByEvaluatingJavaScriptFromString:@"document.title"];禁止滚动:[(UIScrollView *)[[webViewsubviews]objectAtIndex:0]setBounces:NO];js掉原生方法给前台传值,通过拦截请求拆分来处理:
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {NSString *urlStr = request.URL.absoluteString;NSLog(@"-------%@",urlStr);// 格式 neng://loadUrl/blog.csdn.net  协议/方法/网址//判断链接中的协议头,如果是neng://, 则进行相关操作#pragma mark  点击内容if ([urlStr hasPrefix:@"ClickContent://"]) {//拿到除去协议头的后部NSString *urlContent = [urlStr substringFromIndex:[@"ClickContent://" length]];//用/来拆分字符串NSArray *urls = [urlContent componentsSeparatedByString:@"/"];//NSLog(@"拆分的结果为:%@", urls);//取出方法名if (urls.count != 2) {return NO;}NSString *PushTVshow = [NSString stringWithFormat:@"%@:", urls[0]]; //带参数的方法,加冒号,没有参数的不加冒号SEL Push = NSSelectorFromString(PushTVshow);//取消警告# pragma clang diagnostic push# pragma clang diagnostic ignored "-Warc-performSelector-leaks"[self performSelector:Push withObject:urls[1]]; //将blog.csdn.net作为参数传入 ,没有参数的也不用传惨直接掉方法// [self performSelector:Push];# pragma clang diagnostic pop//  NSLog(@"方法名为%@, 传入参数为%@", PushTVshow, urls[1]);return NO;}
</pre><pre code_snippet_id="1679353" snippet_file_name="blog_20160511_12_817688" name="code" class="objc">#pragma mark - 传两参数if ([urlStr hasPrefix:@"buymembers://"]) {//拿到除去协议头的后部NSString *urlContent = [urlStr substringFromIndex:[@"buymembers://" length]];//用/来拆分字符串NSArray *urls = [urlContent componentsSeparatedByString:@"/"];// NSLog(@"---%@", urlContent);if (urls.count != 3) {return NO;}//  NSLog(@"拆分的结果为:%@", urls);NSString *buyMember = [NSString stringWithFormat:@"%@::", urls[0]]; //带参数的方法,加冒号// NSLog(@"方法名为%@, 传入参数为%@", buyMember, urls[1]);SEL Comment = NSSelectorFromString(buyMember);//取消警告# pragma clang diagnostic push# pragma clang diagnostic ignored "-Warc-performSelector-leaks"[self performSelector:Comment withObject:urls[1] withObject:urls[2]]; //将blog.csdn.net作为参数传入# pragma clang diagnostic popreturn NO;}return YES;}
点击内容-(void)ClickContent:(NSString *)url{}// 两参数-(void)buyMember:(NSString *)PAY_MONEY :(NSString*)LINK_ID{}
js写法:oc掉js方法:[WebViewstringByEvaluatingJavaScriptFromString:[NSStringstringWithFormat:@"close_payWindow()"]];传参方法:[WebViewstringByEvaluatingJavaScriptFromString:[NSStringstringWithFormat:@"getVip('%@');",@"true"]];
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: