从某些网页上托管的JavaScript调用Objective-C函数

时间:2012-11-27 14:27:07

标签: javascript objective-c ios

我有一个IOS应用程序,里面有一个Web浏览器。

当显示此Web浏览器时,它会导航到Internet上的页面,例如http://myexample.com/myiosapp

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

实施例。 代码托管在myexample.com/myios app上:

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

应调用名为Save的Objective-C函数,该函数将传入的字符串参数保存到本地存储。

1 个答案:

答案 0 :(得分:6)

是的,你可以,但有点hacky。

在Objective-C方面:

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

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

在Javascript方面:

您的javascript代码将导航到您将根据上述方法过滤的“假”网址。类似的东西:

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

回到Objective-C方面:

在我前面提到的方法中,你会找到关键字js2objc(或你选择的任何一个),然后提取信息并采取任何适当的行动:

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
}