javascript和Objective-c(IOS)之间的通信

我知道在iOS和javascript之间进行通信的方法是在JS中创建伪URL并附加一个字符串,该字符串将用作Objective-C代码的参数并在此委托方法中解析该URL:

-(BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType 

然后通过使用参数callID再次调用本机方法stringByEvaluatingJavaScriptFromString发送返回值。

但我想,就像Android一样,直接从JS调用Objective-C方法并获得返回值。 而不是需要在JavaSCript中编写任何方法来获取返回值。 实际上我们已经有了JS代码。 它与Android通信时效果很好。

是否有任何技巧可以解决我将在AppStore上批准的问题?

没有内置方法可以执行此操作,但是您可以使用诸如WebViewJavascriptBridge之类的库: https : //github.com/marcuswestin/WebViewJavascriptBridge 。

即使有内置解决方案,也没有标准。 因此,无论如何,它都不会像在Android上那样工作。 与Obj-C代码进行通信意味着您正在远离浏览器并转向平台特定的实现,这些实现本质上因平台而异。

您可以使用简单的步骤从目标C调用javascript方法。

请仔细阅读Apple文档

如果我正确理解你的问题,你想从Java脚本调用Objective-c方法,那么下面是我从Apple文档中引用的例子: –

我们来看一个示例类。 在这种情况下,我们将创建一个Objective-C地址簿类并将其公开给JavaScript。 让我们从类定义开始:

 @interface BasicAddressBook: NSObject { } + (BasicAddressBook *)addressBook; - (NSString *)nameAtIndex:(int)index; @end 

现在我们将编写代码以将BasicAddressBook实例发布到JavaScript:

 BasicAddressBook *littleBlackBook = [BasicAddressBook addressBook]; id win = [webView windowScriptObject]; [win setValue:littleBlackBook forKey:@"AddressBook"]; 

一旦将这些方法公开给JavaScript(在本节末尾描述),您就应该能够从JavaScript环境访问基本地址簿,并使用标准JavaScript函数对其执行操作。

现在,让我们举例说明如何在JavaScript中使用BasicAddressBook类实例。 在这种情况下,我们将在地址簿中的某个索引处打印一个人的姓名:

 function printNameAtIndex(index) { var myaddressbook = window.AddressBook; var name = myaddressbook.nameAtIndex_(index); document.write(name); }