从 UIWebView 启动移动 Safari *无需*修改应用程序源?

Posted

技术标签:

【中文标题】从 UIWebView 启动移动 Safari *无需*修改应用程序源?【英文标题】:Launch mobile Safari from UIWebView *without* modifying app source? 【发布时间】:2010-12-17 02:55:33 【问题描述】:

我正在开发一个只能在 UIWebView 内的应用内查看的小型网站,并且一个页面有多个指向外部网站的链接。我希望这些在移动 Safari 中打开,但应用程序内的所有链接都加载到 webview 中。修改应用程序的源代码不是一种选择,因为网站需要在提交任何更改之前处于活动状态。

有没有办法强制 UIWebView 中的链接使用 html/5 或 javascript 启动移动 Safari?模仿shouldStartLoadWithRequest?鬼鬼祟祟的变通办法还是出色的替代解决方案?

(而且,纯粹出于好奇……为什么不呢?)

【问题讨论】:

【参考方案1】:

让网站通过简单的 HTML 访问 iPhone 上的框架是一个糟糕的设计。这将打开各种安全漏洞。它不是您要更改的网络行为,因此我认为您可能需要更改应用程序源。我仍然不明白为什么这不是一个选择。能不能再深入一点?

【讨论】:

这是有道理的——我从未充分考虑过安全风险。由于时间限制,无法更改应用程序源; webview 包含一个用于假日促销的 iAd 式网站,并且需要在我们推出新版本之前上线。 (也无法控制最终服务器。)启动移动 Safari 是理想的解决方案,因为外部站点的可用性很差 + 无法返回促销站点。很可能会尝试在顶部使用自定义导航的 iframe,因为那样会让人畏缩。【参考方案2】:

一种选择是添加自定义 URL 处理程序。然后,您的网站可以确定“浏览器”是否是应用程序,并为您希望在应用程序中维护(也称为打开)的那些链接提供自定义 URL。然后,任何标准 HTTP/s URL 都会在 Mobile Safari 中打开。

换句话说,让您的网络服务器为您希望应用处理的链接提供诸如 myappurl:// 之类的 URL,并为打开 Mobile Safari 提供 http://。

【讨论】:

以上是关于从 UIWebView 启动移动 Safari *无需*修改应用程序源?的主要内容,如果未能解决你的问题,请参考以下文章

UIWebView 在 Safari 中启动

如何使用 Safari 应用程序在 UIWebView 中启动链接?

我可以格式化 URL 以从我的应用程序的 UIWebView 中启动 Safari 吗?

在 UIWebView 中作为 Safari 打开网站?

通过 UIWebView 从网页打开 Safari 中的链接

Facebook 登录在 Safari 中有效,但在 UIWebView 中无效