如何使用单个参数从 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 使用参数调用本机函数。我在webviewshouldStartLoadWithRequest...delegate 方法中得到了同样的结果。我可以调用从 javascript 发送的本机函数,但是当函数带有参数时,如何获取函数是什么以及参数是什么。 请指导我。

在下面发布代码。

window.location.href = "js2ios://getNotiData(" +groupId  + ")";

【问题讨论】:

【参考方案1】:

首先,从你的 JS 调用应该是:

window.location.href = "js2ios://getNotiData?groupId=XXX

然后,在包含UIWebViewUIViewController 中,您需要为网络视图添加一个委托(称为: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 中处理它的主要内容,如果未能解决你的问题,请参考以下文章

如何从单个反应组件中调用多个 graphql 突变?

Linux(程序设计):62---定时机制之I/O复用系统调用的超时参数

如何使用单个隐式参数调用 object.apply? [复制]

如何使用 PHPUnit 在类中测试单个 void 方法?

如何从 unix shell 调用带有参数的子例程

在 Bash 中使用 getopts 检索单个选项的多个参数