Cocoa 的 WebView 可以显示 .webarchive 文件。我尝试显示的内容来自粘贴板,例如在 Safari 或 Mail.app 中复制网页的部分内容时。
我遇到的问题是来自 Mail 和 Notes 的 webarchives 不会显示在 WebView 中,而来自 Safari 的 webarchives 会显示。
我查看了这些档案的数据(BBEdit 可以解密它们的二进制 plist 格式并将其很好地显示为 XML),发现问题是由 Mail(和 Notes)放在那里的不寻常的 URL 引用引起的:
<key>WebResourceURL</key>
<string>x-msg://4/</string>
如果我删除该条目或使用 http:// 将其更改为某些内容,WebView 突然可以显示此类存档。
现在,我如何在我的代码中解决这个问题?
我不想解码 webarchive,找到 WebResourceURL 条目并将其删除,然后再将存档传递给 WebFrame 进行加载。
我想知道我是否必须使用 WebView 或其主框架设置其他东西才能完成这项工作。
我注意到 Xcode 可以很好地显示这些 webarchives,这表明 Xcode 以更“正确”的方式使用 WebKit 来解决问题。但是,也许这只是因为它让 NSWebFrame 从磁盘加载存档,而我的代码从 CFData 对象加载它 - 从文件加载时,WebKit 可能使用该文件 URL 作为基本 URL,而它只会阻塞它当它根本没有获得可用的 URL 时。
我在这里为 Xcode 创建了一个小演示项目:http: //files.tempel.org/Various/Mail-WebArchive-Display-Issue.zip
它包括来自 Mail 的原始存档(“mail-bad.webarchive”)和固定存档(“mail-good.webarchive”),两者都显示在演示应用程序的两个 webView 中。
我还使用 Apple DTS 打开了技术支持 Indident (TSI),并回复说我应该提交错误。可以在此处查看错误报告:http: //openradar.appspot.com/radar?id= 2843403