如何使用单个参数从 Javascript 调用 Objective-C 方法并在 Xcode 中处理它
Posted
技术标签:
【中文标题】如何使用单个参数从 Javascript 调用 Objective-C 方法并在 Xcode 中处理它【英文标题】:How do I call an Objective-C method from Javascript with a single parameter and handle it in Xcode 【发布时间】:2015-04-21 11:07:04 【问题描述】:我是这种应用程序的新手。任何人都可以帮助我的要求真的很有帮助。
我有 iPad 应用程序,其中 javascript 使用参数调用本机函数。我在webview
shouldStartLoadWithRequest
...delegate 方法中得到了同样的结果。我可以调用从 javascript 发送的本机函数,但是当函数带有参数时,如何获取函数是什么以及参数是什么。
请指导我。
在下面发布代码。
window.location.href = "js2ios://getNotiData(" +groupId + ")";
【问题讨论】:
【参考方案1】:首先,从你的 JS 调用应该是:
window.location.href = "js2ios://getNotiData?groupId=XXX
然后,在包含UIWebView
的UIViewController
中,您需要为网络视图添加一个委托(称为:UIWebViewDelegate
)。以下方法对您很重要:
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
NSString *urlString = [[request URL] absoluteString];
if ([urlString hasPrefix:@"js2ios:"])
NSURLComponents *urlComponents = [NSURLComponents componentsWithURL:request.url resolvingAgainstBaseURL:NO];
NSArray *queryItems = urlComponents.queryItems;
NSString *param1 = [self valueForKey:@"groupId" fromQueryItems:queryItems];
// NOW CALL YOUR OBJECTIVE-C METHOD WITH param1 !
return NO;
【讨论】:
非常感谢您的回答。我尝试了以下方法,我相信你的代码是最好的。我也在发布我的代码。NSArray *urlArray = [urlStr componentsSeparatedByString:@"?"]; NSString *paramsString; if([urlArray count] > 1) paramsString = [urlArray objectAtIndex:1]; NSString *strGroupid=@"groupId="; paramsString=[paramsString substringFromIndex:[strGroupid 长度]];以上是关于如何使用单个参数从 Javascript 调用 Objective-C 方法并在 Xcode 中处理它的主要内容,如果未能解决你的问题,请参考以下文章
Linux(程序设计):62---定时机制之I/O复用系统调用的超时参数