【问题标题】:Calling an Objective-C function from JavaScript hosted on some web page从托管在某些网页上的 JavaScript 调用 Objective-C 函数
【发布时间】:2012-11-27 14:27:06
【问题描述】:

我有一个 IOS 应用程序,其中有一个网络浏览器。

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

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

例如。 托管在 myexample.com/myios 应用上的代码:

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

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

【问题讨论】:

  • 可以在js中使用本地存储,真的很简单!见diveintohtml5.info/storage.html
  • 但是使用本地存储后,我可以通过 XCode 读取该信息吗?
  • 没有。我不明白你在找什么。
  • @SerhatÖzgel:XCode 是一种开发环境,而不是一种编程语言。所以它没有方法。您可能指的是 Objective-C 方法。我已经相应地更改了标题和标签。

标签: javascript objective-c ios


【解决方案1】:

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

在 Objective-C 方面:

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

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

在 Javascript 方面:

您的 javascript 代码将导航到一个“假” URL,您将使用上述方法过滤该 URL。比如:

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
}

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-06
  • 1970-01-01
相关资源
最近更新 更多