0

我在这里阅读了几篇关于如何从应用程序中启动 Safari 的文章,这些文章都说要使用 UIApplication:OpenURL: 但这对我不起作用。

我有一个已下载并存储在我的应用程序沙箱中的 .html 页面。我可以在 UIWebView 中启动此页面,但无法启动它,使用以下代码没有任何反应。

  NSURLRequest *requestObj = [NSURLRequest requestWithURL:firstPageFullPath];
 [[UIApplication sharedApplication] openURL:[requestObj URL]];

路径格式为 file://..../page1.html,正如我所提到的,如果我将 requestObj 传递给 UIWebView,它将成功加载。

任何想法为什么它不起作用,Safari只能从具有非本地文件的应用程序启动吗?

4

2 回答 2

0

我猜想这意味着文件 URL 会发生这种情况。如果您使用UIWebView,该浏览器实例将使用您的应用程序的沙箱(例如,该浏览器实例可用的 cookie 与 Safari 应用程序的 cookie 无关)。如果您使用 Safari,那么您就脱离了沙盒,如果 Apple 允许它像文件浏览器一样使用,Bad Things™ 可能会发生。

于 2012-05-21T03:34:43.120 回答
0

Safari 的行为与您自己的沙盒应用程序非常相似——即它无法访问其自己的沙盒之外的文件。因此它无法访问您使用文件 URL 引用的文件,因为该文件位于您的应用程序的沙箱中,而不是 Safari 的沙箱中。您应该将远程 URL 传递给 Safari - 通过将您的 html 放在某处的 Web 服务器上。如果这对您的应用程序来说是不可能/不实用的,那么您将需要继续UIWebView在您的应用程序内部使用 - 因为您已经发现它能够访问本地 html 文件。实现您需要的任何其他控件(前进、后退等)以模仿 Safari 的行为。

于 2012-05-21T03:45:54.150 回答