macos - WebView 拒绝访问沙盒 Mac 应用程序中的网页资源

标签 macos cocoa webview sandbox

我最近开始实现 Mac App Store 沙箱(呃),并注意到加载到 WebView 中的保存的 HTML 存档不会呈现引用的资源。例如,保存的网页 MyPage.html 可以引用相应 MyPage_files 文件夹中的 styles.css、image.jpg 和 script.js(Google Chrome 的保存“网页,完整”约定):

  • MyPage.html
  • MyPage_files/styles.css
  • MyPage_files/image.jpg
  • MyPage_files/script.js

但是,将 MyPage.html 文件加载到 WebView 后,Console.app 会报告如下错误:

sandboxd: deny file-read-data /Users/user/Desktop/MyPage_files/styles.css
sandboxd: deny file-read-data /Users/user/Desktop/MyPage_files/image.jpg
sandboxd: deny file-read-data /Users/user/Desktop/MyPage_files/script.js

这应该被视为一个错误,还是只是沙箱内 WebView 的限制?

最佳答案

这是原始沙盒设计的一个限制,但 Apple 已经(至少部分)修复了这个问题。

Apple 工程师至少在两个地方讨论了新的解决方案,但不幸的是,我相信它们都是“预发布”信息源,Apple 以外的任何人都不允许在这样的公共(public)场所谈论。

如果您有付费 Mac 开发者计划成员(member)资格,请访问 Application Sandboxing forum .

我相信来自The WWDC 2012 videos的“OS X App Sandbox”视频无需付费 Mac 开发者计划成员(member)资格即可使用。

此外,请记住,您将需要某种后备措施,除非您愿意要求所有用户升级到新版本的 OS X。您绝对应该向 Apple 提交错误,解释您的需求,并在论坛上发布相关内容。您可以在非预发布论坛上发布相关内容,因为您询问如何在 Lion 上执行此操作,这不涉及任何 secret 信息。

最后一点:如果您自己创建文件,则可以保存它们,以便有一个 MyPage bundle ,其中包含 .html 文件和 _files 子目录;然后,当用户选择您的 bundle 时,您将可以访问所有内容。但是,如果您尝试打开例如由 Safari 创建的文件,这当然不起作用。

关于macos - WebView 拒绝访问沙盒 Mac 应用程序中的网页资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11317393/

相关文章:

PHP 和 "turning on"mysqli

python - 在每隔一行的开头和结尾添加引号,忽略空行

swift - NSCollectionView - 自定义 View 项未连接或不会选择

cocoa - 从 NIB 将 NSMenu 设置为 NSWindow 的主菜单?

cocoa - 如何使 NSService 上下文菜单自动启用,而不在系统首选项-键盘-服务中选择它然后注销?

android - fragment 中的 WebView 不加载任何网页、kotlin、android

macos - 在 Carbon Emacs 中使用 Alt 作为 Meta 键,而不是 Apple Command Key

cocoa - 如何删除之前通过 [NSUserDefaults registerDefaults :] call 注册的值

ios - 这是一个 Swift 错误吗?在 webView 中打开文件

android - Webview + 滚动问题 + android