是否会使用UIWebview中的JSContext来重新调整我的应用程序?

时间:2014-01-29 10:37:18

标签: javascript ios objective-c uiwebview webkit

我们的应用程序中有一项要求,我们必须在网络/本地边界之间进行通信 - 在UIWebView中运行的JavaScript与应用程序中的ObjectiveC之间进行通信。

Web组件通过pagebus(订阅和发布机制)进行内部通信,并且要求本机组件也应该足够能够订阅这些事件并收听它们。

我们都知道从ObjectiveC拨打UIWebView的唯一正式方法是通过stringByEvaluatingJavaScriptFromString。从JavaScript调用的典型方法是设置window.location以在shouldStartLoadWithRequest:委托上触发UIWebView回调。但这对处理页面总线事件没有用。

Apple在iOS7中为我们提供了一个公共JavaScriptCore框架(WebKit的一部分),而JavaScriptCore提供了简单的机制来代理ObjectiveC和JavaScript“上下文”之间的对象和方法。

不幸的是,为了利用这个框架来实现我们的目标,我们需要webview的JSContext对象,但是没有实现它的机制。有一个堆栈溢出链接,我们发现有两种方法可以实现这一点(两者都没有记录)。

方法1:通过KVC获取JSContext

JSContext *ctx = [webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];

方法2: 通过WebKit的-didCreateJavaScriptContext委托回调获取JSContext。

请在下面找到参考链接 Why use JavaScriptCore in iOS7 if it can't access a UIWebView's runtime? 问题是我们可以在我们的应用程序中使用这些方法中的任何一种,这样我们的应用程序就不会在App Store中被拒绝 或者是否有任何其他机制来实现我们听取pagebus事件的目标?

1 个答案:

答案 0 :(得分:0)

我认为苹果不会拒绝您的应用。我在我的应用程序中使用kvc从uiwebview获取jscontext并通过了应用程序审核。