使用 UIWebView 让 Objective-C 与 JavaScript 对话

Posted

技术标签:

【中文标题】使用 UIWebView 让 Objective-C 与 JavaScript 对话【英文标题】:Getting Objective-C to talk to JavaScript with UIWebView 【发布时间】:2010-09-17 19:08:22 【问题描述】:

我正在构建一个在 UIWebView 中加载本地 html 文件的 iPad 应用程序。我有一个 int 存储在视图控制器中,我想用它来确定要加载到 html 文档中的内容。

此外,我希望在 html 中创建可点击的链接,以在最高层生成新的、较小的 UIWebView,例如“弹出窗口”。

如何从 Obj-C 到 javascript 来回发送数据?

【问题讨论】:

【参考方案1】:

您可以使用UIWebView 中的stringByEvaluatingJavaScriptFromString: 方法将数据从Cocoa 层发送到JavaScript 层。

Cocoa 层还可以通过在视图控制器中实现UIWebViewDelegate 协议来“拦截”链接点击;单击链接时,将调用委托方法webView:shouldStartLoadWithRequest:navigationType:,此时 Cocoa 层可以执行您正在寻找的那种“弹出”操作。

(虽然我会问你为什么你要生成这样的弹出窗口。我的直觉告诉我,从用户的角度来看,这看起来和感觉都很烦人。)

【讨论】:

也许弹出窗口是一个糟糕的词选择。我希望用户能够单击某些单词,在顶部打开一个小视图,其中将提供有关所选单词的更多信息。 (图像、定义等) @Chris 我给你的答案也适用于这种情况。关键是要知道用户何时点击了链接,然后采取行动。 会的。非常感谢您的回答。我的一个担心是,每当用户单击任何链接时都会调用委托方法,但不会检索有关单击的链接的任何信息(地址、文本等),因此如果我有多个链接将无济于事同一个文档,每个文档应该呈现不同的内容。 @Chris 你错了。如果您仔细查看该方法,您会发现其中一个参数是 NSURLRequest 对象,其中包含有关被点击链接的信息。 先生,您是我的英雄,我觉得自己很笨。非常感谢。

以上是关于使用 UIWebView 让 Objective-C 与 JavaScript 对话的主要内容,如果未能解决你的问题,请参考以下文章

响应者链(UItableViewCell 内的 UIWebView)Objective-C

如何在 iOS 7 的 UIWebView 中从 JavaScript 调用 Objective-C?

Objective-C UIWebView添加脚视图

在ios uiwebview objective-c中检查布尔值是yes还是no时出错

如何在 iOS 8 Objective c 中的 UIWebView 中从文档中加载 png 图像

从 javascript 到 Objective-C 的通信