从javascript调用objective-c方法

我做任何webView我想从JavaScript调用任何返回任何参数的客观c方法。 我尝试了很多方法,但不允许。 目标c方法在这里:

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType { NSURL *URL = [request URL]; if ([[URL scheme] isEqualToString:@"donordialog"]) { // now we need to figure out the function part NSString *functionString = [URL resourceSpecifier]; if ([functionString hasPrefix:@"bloodTypeChanged"]) { // the blood type has changed, now do something about it. NSString *parameter = [functionString stringByReplacingOccurrencesOfString:@"bloodTypeChanged" withString:@""]; // remove the '(' and then the ')' parameter = [parameter stringByReplacingOccurrencesOfString:@"(" withString:@""]; parameter = [parameter stringByReplacingOccurrencesOfString:@")" withString:@""]; // log the paramter, as I don't know what to do with it right now UIAlertView *alert=[[ UIAlertView alloc] initWithTitle:@"iosdan javascripti" message:@"ddddddddd" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil]; [alert show]; //NSLog(@"%@", parameter); } return NO; } return YES; } 

JavaScript的:

 function myFunction() { url="http://example.com"; window.location="donordialog:blooTypeChanged("+url+")"; } 

HTML:

 <button onclick="myFunction()">click me</button> 

评论:我需要的是:它是obj c方法例如。 aaa {}。 我的aaa方法必须返回任何参数。 我有wevView。 我加载了任何url到这个webView:例如www.example.com/forios。 我需要从www.example.com/forios中的html调用这个(aaa)方法,并提醒aaa函数的结果。 理解?。 如果明白,不要看我的代码。 无论如何,请帮助自己。 我的问题的Android版本: 从JavaScript通过Android WebView调用Java函数我想提醒从方法返回的一些参数。 请帮助。 谢谢。

我使用obj-c中的JavaScript进行交互的最常见方法是更改​​哈希。 在你需要的事件js写window.location.hash = '#cmd_alertMessage'; 在这之后你的- (BOOL)webView: shouldStartLoadWithRequest: navigationType:将会被调用:

  - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType { NSArray * compenents = [request.URL.absoluteString componentsSeparatedByString:@"#"]; if (compenents.count > 1) { NSString * cmd = compenents[1]; if ([cmd rangeOfString:@"cmd_alertMessage"].location != NSNotFound) { // Call your obj-c method and get appropriated param NSString * jsFunction = [NSString stringWithFormat:@"setParameterFromAAAMethod('%@')", [self aaa]]; // Return this param back to js NSString * alertMessage = [webView stringByEvaluatingJavaScriptFromString:jsFunction]; } } return YES; } - (NSString *)aaa { return @"This is special parameter that you need"; } 

所以,它将分三步工作:

  1. 在js中调用哈希改变来从obj-c代码请求参数;
  2. 处理哈希改变(参数请求)并返回到obj-c中的 js;
  3. 再次在js中处理接收到的参数

这是一个快速简单的解决scheme, 没有 JavaScriptCore的向后兼容性(可能考虑升级到Javascriptcore)。 这是一个简单的实现。

注意:此解决scheme仅适用于UIwebview(而不是UIscrollview)

//viewcontroller.h

 @interface ViewController : UIViewController<UIWebViewDelegate> @property (strong, nonatomic) IBOutlet UIWebView *viewWeb; @end 

//viewcontroller.m

 - (void)viewDidLoad { [super viewDidLoad]; NSString *fullURL = @"http:player.fusion.fm"; NSURL *url = [NSURL URLWithString:fullURL]; NSURLRequest *requestObj = [NSURLRequest requestWithURL:url]; [_viewWeb loadRequest:requestObj]; _viewWeb.delegate = self; } -(BOOL)webView:(UIWebView *)_viewWeb shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType { NSURL *url = request.URL; if ([[url scheme] isEqualToString:@"ios"]) { [self mute]; // <-- YOUR OBJ-C FUNCTION HERE NSLog(@"test"); return YES; }else { return YES; } } 

// Javascript(在webview中)

 try { window.location="ios://null" } catch(err) { } 

资料来源: http : //adoptioncurve.net/archives/2012/09/calling-objective-c-methods-from-javascript-in-a-uiwebview/

您可以将隐藏的iframe的位置设置为特定于您的应用的位置,然后在Obj-C中拦截该请求。

这里有一个概述和一些例子: http : //blog.techno-barje.fr//post/2010/10/06/UIWebView-secrets-part3-How-to-properly-call-ObjectiveC-from-Javascript/

那么,我不确定我的问题是否正确,但是如果您想调用任何JavaScript方法,那么您可以这样做:

[yourWebView stringByEvaluatingJavaScriptFromString:@"yourMethodName()"];

你也可以通过上面的方法传递参数。