2014-11-25 47 views
1

我知道iOS和javascript之间的通信方式是在JS中创建假的URL并追加一个字符串作为参数用于Objective-C代码并解析该URL在此委托方法:javascript和objective-c之间的通信

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

通过调用本地方法stringByEvaluatingJavaScriptFromString与参数CALLID再次然后发送返回值。

但我想,就像Android一样,直接从JS调用Objective-C方法并获得返回值。而不需要在JavaSCript中编写任何方法来获取返回值。其实我们已经有JS代码了。在与Android进行通信时,它非常完美。

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

回答

1

没有内置方法来执行此操作,但是您可以使用WebViewJavascriptBridge这样的库:https://github.com/marcuswestin/WebViewJavascriptBridge

即使有内置解决方案,也没有这方面的标准。因此,无论哪种方式,它都不会像在Android上那样工作。使用Obj-C代码进行通信意味着您正在从浏览器转向特定于平台的实现,实际上,这些实现在不同平台之间有所不同。

0

如果我正确地理解你的问题,你想调用来自然后在下面的Java脚本的Objective-C的方法是我从Apple Documentation提到的例子: -

我们来看一个示例类。在这种情况下,我们将创建一个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); 
} 
+0

谢谢shabbier,但是这个功能在mac开发中。我想要iOS。我无法在iOS中使用此功能。这样的IOS有什么程序吗? – Mahesh 2014-12-04 04:45:29

+0

检查此链接http://stackoverflow.com/questions/3501618/how-to-use-windowscriptobject-on-the-iphone ?? – 2014-12-04 04:50:34