转载:ios中objective-c与js的交互

原始出处:http://mkhgg.blog.51cto.com/1741572/752962

iOS中js与objective-c的交互

因为在iOS中没有WebKit.Framework这个库的,所以也就没有 windowScriptObject对象方法了。要是有这个的方法的话 
就方便多了,(ps:MacOS中有貌似)

现在我们利用其他方法去达到js与objective-c的交互效果。

首先是objective-c调用js中的代码,可以用uiwebview中的一个方法 
stringByEvaluatingJavaScriptFromString:后面接的是js中的方法名。这个函数的返回值就是所调用js方法

的返回值。

而在js调用objective-c的方法就没那么简单了,

在js中的代码应该这么做:

1 function testFunc(cmd,parameter1)
2 {
3     alert(1);
4     document.write(Date());
5     document.location="objc://"+cmd+":/"+parameter1;  //cmd代表objective-c中的的方法名,parameter1自然就是参数了
6 } 

而在objective-c中,也是利用uiwebview的一个方法,

 1 - (BOOL)webView:(UIWebView*)webView shouldStartLoadWithRequest:
 2 (NSURLRequest*)request navigationType:
 3 (UIWebViewNavigationType)navigationType //这个方法是网页中的每一个请求都会被触发的
 4 {
 5     NSString *urlString = [[request URL] absoluteString];
 6     NSArray *urlComps = [urlString
 7 componentsSeparatedByString:@"://"];
 8     if([urlComps count] && [[urlComps objectAtIndex:0]
 9 isEqualToString:@"objc"])
10     {
11         NSArray *arrFucnameAndParameter = [(NSString*)[urlComps 12 objectAtIndex:1] componentsSeparatedByString:@":/"];
13         NSString *funcStr = [arrFucnameAndParameter objectAtIndex:0];
14         if (1 == [arrFucnameAndParameter count])
15         {
16             // 没有参数
17             if([funcStr isEqualToString:@"doFunc1"])
18             {
19                 /*调用本地函数1*/
20                 NSLog(@"doFunc1");
21             }
22         }
23         else if(2 == [arrFucnameAndParameter count])
24         {
25             //有参数的
26             if([funcStr isEqualToString:@"doFunc1"] &&
27 [arrFucnameAndParameter objectAtIndex:1])
28             {
29                /*调用本地函数1*/
30                 NSLog(@"doFunc1:parameter");
31             }
32         }
33         return NO;
34     };
35     return YES;
36 } 

这个方法是可以达到js调用本地objective-c的方法,可惜没办法把返回值返回给js,所以还是要绕过 
stringByEvaluatingJavaScriptFromString:这个弯,用

stringByEvaluatingJavaScriptFromString:

函数去掉js的方法,把返回值当做js方法中的参数形式传回去给 
js。这个可以有,呵呵~

本文出自 “命苦” 博客,请务必保留此出处http://mkhgg.blog.51cto.com/1741572/752962

时间: 2024-07-31 10:15:30

转载:ios中objective-c与js的交互的相关文章

[转载]iOS中侧边栏的添加

原文地址:iOS中侧边栏的添加作者:伤心的小果冻 1.添加系统框架 2.添加三方类库 3.创建一个MenuViewController作为侧边滑动时候显示的视图 //  MenuViewController.h //  sideTableView // //  Created by Dong on 13-9-26. //  Copyright (c) 2013年 dong. All rights reserved. // #import <UIKit/UIKit.h> @interface M

iOS开发日记27-WebView与JS的交互

今天博主有一个WebView与JS的交互的需求,遇到了一些困难点,在此和大家分享,希望能够共同进步. WebView与JS的交互分为两种种方式:1.在OC中调用JS 2.在JS中调用OC 网页试用[NSString stringWithFormat:@"http://cn.bing.com"] 一.在OC中调用JS 直接上代码 -(void)webViewDidFinishLoad:(UIWebView *)webView { //    NSString *docStr=[webVi

Unity中CS脚本于JS脚本交互

这里需要注意的是被调用的脚本必须放在 "Standard Assets". "Pro Standard Assets" 和"Plugins" 这三个文件夹中的任何一个里,而调用它的脚本不能在一个目录文件夹中,否则无法编译通过,原因是Unity会最先编译这三个文件夹,"Editor"目录里的脚本稍后编译,其他的脚本最后编译(既 CS调用JS,CS脚本放在其他文件家中,JS脚本要放在 如上三个文件夹中先编译:JS调用CS,JS脚本

iOS中UIWebView执行JS代码(UIWebView)

iOS中UIWebView执行JS代码(UIWebView) 有时候iOS开发过程中使用 UIWebView 经常需要加载网页,但是网页中有很多明显的标记让人一眼就能看出来是加载的网页,而我们又不想被人卡出来. 如网页中的这个导航 通常我们不需要WebView中的 导航栏,也不需要里面的返回上一级的交互.. 对WebView常用的另外一种功能就是对某个点击添加对用function实现JS调用OC的交互功能. 下面一一介绍: 1. UIWebView 调用JS代码 OC调用JS通常是,在webVi

iOS中UIWebView使用JS交互

iOS中偶尔也会用到webview来显示一些内容,比如新闻,或者一段介绍.但是用的不多,现在来教大家怎么使用js跟webview进行交互. 这里就拿点击图片获取图片路径为例: 1.测试页面html <!doctype html> <html> <head> </head> <body> <div> <img src="test.png"/> </div> </body> <

iOS中的copy 转载

小结iOS中的copy http://www.jianshu.com/p/5254f1277dba  转载自: 介绍copy和mutableCopy 介绍深拷贝与浅拷贝 block为什么要用copy copy相对于直接赋值的好处 总结 预备知识 : 内存的栈区 : 由编译器自动分配释放, 存放函数的参数值, 局部变量的值等. 其操作方式类似于数据结构中的栈. 内存的堆区 : 一般由程序员分配释放, 若程序员不释放, 程序结束时可能由OS回收. 注意它与数据结构中的堆是两回事, 分配方式倒是类似于

iOS中UIWebView使用JS交互 - 机智的新手

iOS中偶尔也会用到webview来显示一些内容,比如新闻,或者一段介绍.但是用的不多,现在来教大家怎么使用js跟webview进行交互. 这里就拿点击图片获取图片路径为例: 1.测试页面html <!doctype html> <html> <head> </head> <body> <div> <img src="test.png"/> </div> </body> <

iOS中消息的传递机制(KVO、Notification、delegation、block以及target-action)---转载

注1:本文由破船[博客]译自Communication Patterns. 本文目录如下所示: 可用的机制 做出正确的选择 Framework示例 小结 每个应用程序或多或少,都由一些松耦合的对象构成,这些对象彼此之间要想很好的完成任务,就需要进行消息传递.本文将介绍所有可用的消息传递机制,并通过示例来介绍这些机制在苹果的Framework中如何使用,同时,还介绍了一些最佳实践建议,告诉你什么时机该选择使用什么机制. 虽然这一期的主题是关于Foundation Framework的,不过本文中还

iOS中UIWebView的一个需求:获得js图片请求完成的回调时机

不久之前,项目中用到了UIWebView加载js的功能,之前使用webView都是简单使用,没考虑很多与js交互的地方,虽然现在项目完成了,但是回头看看这方面的知识还是有些茫然,在此记录一点,然后后续如果有用更多的话再来进行补充. 需求 封装个view,提供给开发者使用,暴露两个方法以供调用: 1.是调用initWithXXX进行初始化位置等等参数配置: 2.调用loadH5PageWithSuccessBlock:failureBlock:让view中的webView加载H5页面显示出来即可.