gpt4 book ai didi

cocoa - 从 Mail.app 和 Notes.app 显示 WebArchive

转载 作者:行者123 更新时间:2023-12-03 17:23:10 26 4
gpt4 key购买 nike

Cocoa 的 WebView 可以显示 .webarchive 文件。我尝试显示的内容来自粘贴板,例如在 Safari 或 Mail.app 中复制网页的部分内容时。

我遇到的问题是 Mail 和 Notes 中的 webarchives 不会显示在 WebView 中,而 Safari 中的 webarchives 会显示。

我查看了这些文件的数据(BBEdit 可以解密它们的二进制 plist 格式并将其很好地显示为 XML),发现问题是由邮件(和 Notes)放入其中的不寻常 URL 引用引起的:

<key>WebResourceURL</key>
<string>x-msg://4/</string>

如果我删除该条目或将其更改为使用 http://的内容,WebView 突然可以显示此类文件。

现在,我如何在代码中解决这个问题?

我不想在将存档传递到 WebFrame 进行加载之前解码 webarchive、找到 WebResourceURL 条目并将其删除。

我想知道是否还需要使用 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 提出了技术支持独立人员 (TSI),对方回复说我应该提交错误。错误报告可以在这里看到:http://openradar.appspot.com/radar?id=2843403

最佳答案

在思考 Xcode 可能会做什么之后,我找到了一个解决方案:

这不起作用:

WebArchive *archive = [[WebArchive alloc] initWithData:webData];
[[webView mainFrame] loadArchive:archive];

但这确实:

[[webView mainFrame] loadData:webData MIMEType:@"application/x-webarchive" textEncodingName:@"" baseURL:NULL];

因此,加载存档的显式函数是错误的,而需要显式 URL 的函数(即使我没有给出任何 URL)也可以工作。

想想看。

关于cocoa - 从 Mail.app 和 Notes.app 显示 WebArchive,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15350003/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com