使用 iOS UIWebView 时的 Rails 布局(application.html.erb)逻辑

Posted

技术标签:

【中文标题】使用 iOS UIWebView 时的 Rails 布局(application.html.erb)逻辑【英文标题】:Rails layout (application.html.erb) logic when using iOS UIWebView 【发布时间】:2012-09-27 22:00:17 【问题描述】:

我正在尝试确定是否可以检测到请求何时来自 ios UIWebView,并在这种情况下返回自定义布局。

这是场景。目前我有一个完全在 Rails 中构建的移动 web 视图,它看起来像这样:

这会在浏览器中加载并正常工作。现在,我正在开发一个内置于 Xcode 的 iOS 应用程序,它将本机代码与 UIWebViews 混合。我在这一点上所做的是本地构建红色导航栏。我希望网站的其余部分(所有白色背景)加载到 UIWebView 中。

理想情况下,我会通过检测请求是否来自 iOS 应用程序来做到这一点。如果是这种情况,布局将包含红色导航栏(因为它已经在本地处理)。如果请求来自浏览器,则布局将包括红色导航栏。

我已经四处搜索,但找不到任何关于此的内容。有谁知道如何解决这样的问题?

【问题讨论】:

【参考方案1】:

您可以通过对NSMutableURLRequest 执行[request setValue:@"true" forHTTPHeaderField:@"My-iOSApp"] 向您的本机iOS 应用URL 调用添加自定义标头(这可能会有所不同,具体取决于您在iOS 应用中用于HTTP 网络的系统)

然后使用request.headers 获取Rails 中的标头并检查它们以查看My-iOSApp 键是否在标头中。如果是,则仅渲染底部主体布局,否则使用导航栏渲染整个内容

【讨论】:

谢谢!会试一试并报告,但有道理。我有点希望有一个不需要向本机代码添加任何内容的解决方案。 实现了这个并且效果很好。但有一件事:请求也可能来自 WebView,在这种情况下,自定义标头字段将不存在。但是,启动应用程序时的初始请求始终来自客户端。然后我的解决方案是检查初始请求的标头,如果存在,则将会话变量设置为 true。然后我将会话变量用于标题逻辑。

以上是关于使用 iOS UIWebView 时的 Rails 布局(application.html.erb)逻辑的主要内容,如果未能解决你的问题,请参考以下文章

应用程序从 iOS 中的电子邮件附件启动时的顺序

使用 iPhone UIWebView 时的 Asp.Net 表单身份验证

按钮单击时的 uiwebview 不会返回到该按钮操作中传递的 url

调整键盘大小时的 UIWebView 问题

我正在使用 uiwebview 中加载的内容可编辑 html。我需要代码来设置键盘隐藏/显示时的光标位置

加载另一个 Nib 时的 iOS 自动布局