javascript - iOS JavaScript 桥

标签 javascript ios html uiwebview

我正在开发一个应用程序,我将在 UIWebView 中同时使用 HTML5 和 native iOS 框架。我知道我可以实现 JavaScript 和 Objective-C 之间的通信。是否有任何库可以简化这种通信的实现?我知道有几个库可以用 HTML5 和 javascript(例如 AppMobi、PhoneGap)创建 native iOS 应用程序,但我不确定是否有一个库可以帮助创建大量使用 JavaScript 的 native iOS 应用程序。我需要:

  1. 从 Objective-C 执行 JS 方法
  2. 从 JS 执行 Objective-C 方法
  3. 监听来自 Objective-C 的原生 JS 事件(例如 DOM 就绪事件)

最佳答案

有一些库,但我没有在大型项目中使用过其中任何一个,因此您可能想尝试一下:

不过,我认为这很简单,您可以自己尝试一下。当我需要这样做时,我个人正是这样做的。您还可以创建一个适合您需要的简单库。

1。从 Objective-C 执行 JS 方法

这实际上只是一行代码。

NSString *returnvalue = [webView stringByEvaluatingJavaScriptFromString:@"your javascript code string here"];

更多详情上官方UIWebView Documentation .

2。从 JS 执行 Objective-C 方法

不幸的是,这稍微复杂一些,因为 Mac OSX 上不存在允许两者之间完全通信的相同 windowScriptObject 属性(和类)。

但是,您可以轻松地从 javascript 自定义 URL 调用,例如:

window.location = yourscheme://callfunction/parameter1/parameter2?parameter3=value

然后用这个从 Objective-C 拦截它:

- (BOOL)webView:(UIWebView*)webView shouldStartLoadWithRequest:(NSURLRequest*)request navigationType:(UIWebViewNavigationType)navigationType {
   NSURL *URL = [request URL]; 
   if ([[URL scheme] isEqualToString:@"yourscheme"]) {
       // parse the rest of the URL object and execute functions
   } 
}

这并没有像它应该的那样干净(或通过使用 windowScriptObject),但它有效。

3。监听来自 Objective-C 的原生 JS 事件(例如 DOM 就绪事件)

从上面的解释中,你看到如果你想这样做,你必须创建一些 JavaScript 代码,将它附加到你想要监视的事件并调用正确的 window.location 调用然后被拦截。

再说一次,虽然不是很干净,但它确实有效。

关于javascript - iOS JavaScript 桥,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9473582/

相关文章:

iphone - 导航栏隐藏状态栏

ios - 删除其 super View 后按钮未删除

jquery - 如何在鼠标悬停时管理垂直下拉菜单?

javascript - 禁用 div onClick

javascript - jQuery .on ("click") 异常事件

javascript - 格式 xx-xx 的正则表达式(不包含字母)

ios - iOS Shopify中的登录/注册API实现

php - 推特 API 推文

html - 图片强制向下列表 CSS

javascript - 重新排序 <ul> 的显示顺序