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

Communication between javascript and Objective-c (IOS)

本文关键字:之间 通信 IOS Objective-c JavaScript      更新时间:2023-09-26

我知道在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代码。它在与安卓通信时完美运行。

有什么技巧可以解决我的问题,这些技巧将在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);
}