繁体   English   中英

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

[英]Communication between javascript and 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);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM