【问题标题】:Display WebArchive from Mail.app and Notes.app从 Mail.app 和 Notes.app 显示 WebArchive
【发布时间】:2013-02-27 07:17:03
【问题描述】:

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

【问题讨论】:

    标签: cocoa webview webarchive


    【解决方案1】:

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

    这不起作用:

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

    但这确实:

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

    因此,加载存档的显式函数是错误的,而想要一个显式 URL 的函数,即使我没有给出它,也可以工作。

    去看看。

    【讨论】:

      猜你喜欢
      • 2012-10-04
      • 1970-01-01
      • 2012-05-09
      • 2012-07-18
      • 2012-04-10
      • 2016-02-28
      • 1970-01-01
      • 2012-11-08
      • 1970-01-01
      相关资源
      最近更新 更多