如何在IOS平台上使用js直接调用OC方法

JavaScript027

如何在IOS平台上使用js直接调用OC方法,第1张

本例子是为了让大家能快速开发出OC调用JS功能的一个简单的例子。

1、准备一个本地化的html网页,如jsIOS.html

<script type="text/javaScript">

function postStr(){

return document.getElementById("text1").value

//return "javaScript返回值啦"

}

</script>

2、将此html文件放到项目代码目录里面,如图:

3、拖一个UIWebView控件和UIButton控件到xxxViewController对应的.xib或.storyboard视图的UIView上;

在xxxViewController的.h文件中分别声明UIWebView类型变量和UIButton类型的变量,以及一个按钮点击事件(并且跟视图里面的控件连线),

并且添加一个UIWebViewDelegate类型的委托。<喎�"http://www.2cto.com/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHA+eHh4Vmlld0NvbnRyb2xsZXIuaM7EvP7E2sjdyOfPwqO6PC9wPgo8cD48L3A+CjxwIGNsYXNzPQ=="p1">

#import

@interface ViewController : UIViewController

@property(nonatomic,retain) IBOutlet UIWebView *webview

@property(nonatomic,retain) IBOutlet UIButton *button

-(IBAction)IOS_JS:(id)sender

@end

4、在xxxViewController.m文件中实现通过点击事件,调用javaScript的方法并取得返回值。

代码如下:

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

@synthesize webview

- (void)viewDidLoad

{

[super viewDidLoad]

//设置webView

webview.backgroundColor = [UIColor clearColor]

//webview.scalesPageToFit =YES

webview.delegate =self

//找到jsIOS.html文件的路径

NSString *basePath = [[NSBundle mainBundle]bundlePath]

NSString *helpHtmlPath = [basePath stringByAppendingPathComponent:@"jsIOS.html"]

NSURL *url = [NSURL fileURLWithPath:helpHtmlPath]

//加载本地html文件

[webview loadRequest:[NSURLRequest requestWithURL:url]]

}

/*

* 点击事件

* 调用javaScript的方法postStr()并取得返回值

* 输出返回值到控制台

*/

-(IBAction)IOS_JS:(id)sender

{

NSString *str = [self.webview stringByEvaluatingJavaScriptFromString:@"postStr()"]

NSLog(@"JS返回值:%@",str)

}

- (void)didReceiveMemoryWarning

{

[super didReceiveMemoryWarning]

}

@end

(BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request1 navigationType:(UIWebViewNavigationType)navigationType

{

NSString *requestString = [[request1 URL] absoluteString]

NSString *exchangeProtocol = @"xxxxxx:xxx"

......

}

客户端和页面商定好,客户端用上面的方法 获取到按钮事件 也就是一个跳转的链接之类 判断一下 客户端可以自行处理下面的事

点击事件在IOS上没有绑定成功 原因是在ios系统中,例如document,div,body这些本身并没有可以被点击的属性的元素不能作为托管点击事件的父元素。所以,用这样的方法进行事件托管,ios会获取不到你的document的点击事件,自然无法获取到你想要绑定的元素身上。

解决方法:在绑定点击事件的元素上绑定cursor:pointer