【问题标题】:Unable to call native all iOS functions from UIWebView using JavaScriptCore and JSContext无法使用 JavaScriptCore 和 JSContext 从 UIWebView 调用本机所有 iOS 函数
【发布时间】:2014-04-14 16:25:18
【问题描述】:

让我解释一下我长期以来一直困扰着我的问题。任何帮助将不胜感激。请帮忙。

我正在开发 iOS 中的混​​合类型的应用程序。我正在使用 UIWebViewhttp://myserver.com 加载网页(它的示例不是实际 URL)我在此服务器上托管了多个网页。

我正在使用 "JSContext"UIWebView 中的 javascript(从我的服务器加载的网页)与原生 iOS 函数之间进行通信。

我已按照UIWebView JavaScript losing reference to iOS JSContext namespace (object) 给出的程序,上下文丢失了,但我添加了解决此问题的解决方法。 然后,对于UIWebView 内的某些帧加载事件,我的 iOS 上下文正在消失。 执行以下步骤后,上下文消失了。

  1. 我从UIWebView 的myserver 加载page1。几乎所有功能都运行良好所有功能 OS 原生 iOS 从 javascript 调用。
  2. 现在,由于 page1 中的交互而加载第二个 page2 时,相同的 UIWebView javascript 上下文会消失。

还有一件更神奇的事情。如果我在UIWebView 中直接加载page2 而不是间接加载(page1->page2)。一切正常,所有本机方法都按预期从UIwebView 调用。 请帮忙。如果您想了解更多信息,请询问。

【问题讨论】:

标签: javascript ios objective-c uiwebview


【解决方案1】:

首先,以这种方式窃取和使用 UIWebView 的 JavaScriptContext 很可能是导致应用被拒绝的途径。

但如果这只是一个科学项目...

您可以尝试另一种获取 JavaScriptContext 的技术。我在这个 GitHub 项目中提出了一个解决方案:

https://github.com/TomSwift/UIWebView-TS_JavaScriptContext

基本上,我正在使用一些有关 WebKit 如何在 NSObject 上实现类别的知识,以拦截一些非处理的 WebKit 委托方法,这些方法在为框架创建新的 JavaScriptContext 时调用。

【讨论】:

  • 感谢您的回答,但 - (void)webView:(UIWebView *)webView didCreateJavaScriptContext:(JSContext *)ctx { ctx[@"myinterface"] = self; or ctx[@"window.myinterface"] = self; } 我的 html 调用 window.myinterface.mynativefunc('hello'); 根本没有被调用。请帮忙。
  • 示例应用程序工作但仍然存在 jnix 指定的问题。
  • 当页面的某些部分在没有调用 webViewDidFinishedloading 的情况下加载。我无法为此类请求设置 JSContext。
  • @TomSwift 你知道解决方案吗?我仍然面临同样的问题。请帮助。
  • 对不起;如果没有更多信息,很难猜测发生了什么。如果它在示例应用程序中有效,那么您需要弄清楚您的代码有什么不同。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-07
  • 1970-01-01
  • 2012-08-08
  • 2020-08-26
  • 1970-01-01
相关资源
最近更新 更多