iOS JavaScript桥
我正在开发一个将同时使用UIWebView中的HTML5和本机iOS框架的应用程序。我知道我可以实现JavaScript和Objective-
C之间的通信。是否有任何库可以简化此通信的实现?我知道有几个库可以用HTML5和javascript创建本机iOS应用程序(例如AppMobi,PhoneGap),但是我不确定是否有一个库可以帮助创建使用JavaScript繁重的本机iOS应用程序。我需要:
- 从Objective-C执行JS方法
- 从JS执行Objective-C方法
- 监听来自Objective-C的本地JS事件(例如DOM ready事件)
回答:
有一些库,但是我没有在大型项目中使用任何库,因此您可能想尝试一下:
- WebViewJavascriptBridge:https : //github.com/marcuswestin/WebViewJavascriptBridge
- GAJavaScript:https://github.com/newyankeecodeshop/GAJavaScript
—
但是,我认为这很简单,您可以自己尝试一下。当我需要这样做时,我个人就是这样做的。您可能还会创建一个适合您需求的简单库。
1.从Objective-C执行JS方法
这实际上只是一行代码。
NSString *returnvalue = [webView stringByEvaluatingJavaScriptFromString:@"your javascript code string here"];
有关官方UIWebView文档的更多详细信息。
2.从JS执行Objective-C方法
不幸的是,这稍微复杂一点,因为Mac OSX上不存在相同的windowScriptObject属性(和类),因此两者之间无法完全通信。
但是,您可以轻松地从javascript自定义网址进行调用,例如:
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 ready事件)
从上面的解释中,您可以看到,如果要执行此操作,则必须创建一些JavaScript代码,将其附加到要监视的事件上,然后调用正确的window.location
调用然后将其拦截。
同样,它不是很干净,但是可以工作。
以上是 iOS JavaScript桥 的全部内容, 来源链接: utcz.com/qa/419996.html