在一些网页上调用JavaScript托pipe的Objective-C函数

我有一个IOS应用程序,它有一个网页浏览器。

显示此Web浏览器时,它将导航到Internet上的一个页面,如http://myexample.com/myiosapp 。

是否有可能在这个网站上放置一个JavaScript代码,当它被下载到手机,与本机应用程序进行通信? 它可以调用一个Objective-C方法,或者写一些东西到这个应用程序的存储空间吗?

防爆。 在myexample.com/myios应用上托pipe的代码:

function saveSomeString() { xcode.Save("somestring"); } 

应该调用一个名为Save的Objective-C函数,它将传入的string参数保存到本地存储中。

是的,你可以,但是有点不好意思。

在Objective-C方面:

基本上,在UIWebView中,您将使用在URL请求开始之前调用的方法shouldStartLoadWithRequest(来自UIWebViewDelegate):

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

在Javascript方面:

您的JavaScript代码将导航到您将在上述方法上进行过滤的“虚假”url。 就像是:

 window.location = "js2objc://save:param"; 

回到Objective-C方面:

在我之前提到的方法内部,您可以查找关键字js2objc(或您select的任何一个),然后提取信息并采取任何适当的操作:

 if([[url scheme] isEqualToString:@"js2objc"]){ // extract the parameters and save them, o do whatever action you need return NO; // so the UIWebView doesn't actually follow the url }