我最近开始实现 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/