选择用于共享的数据格式 (HTML)

[ 本文适用于编写 Windows 运行时应用的 Windows 8.x 和 Windows Phone 8.x 开发人员。如果你要针对 Windows 10 进行开发,请参阅 最新文档 ]

不论你写的是源应用(该应用有助于用户共享内容),还是目标应用(该应用会接收内容),都应花些时间思考一下要支持的数据格式和文件类型。在这里,我们将介绍 Windows.ApplicationModel.DataTransfer 命名空间支持的标准格式以及未应用标准格式时如何创建并使用自定义格式。

为源应用选择数据格式

如果编写源应用,则不限于仅一种数据格式或文件类型。尽管一种格式可能比其他格式更有意义,但通过提供其他格式的相同数据,你可以帮助确保用户可以使用他们选择的目标应用进行共享。例如,如果用户想共享格式化文本,如网页中的格式化文本,那么你还可能想提供该内容的纯文本版本,因为并不是每个目标应用都支持格式化文本。

注意  支持的其他格式的数量取决于用户要共享的内容类型。要考虑内容是什么以及用户共享内容时期望获得什么,这一点非常重要。例如,创建格式化文本的纯文本版本通常更有意义。但是创建指向某个网页(该网页包含该文本)的链接可能并不是用户的期望。

 

**示例方案:**用户希望共享他们在你的应用中阅读的文章。如果要在 Web 上提供该内容,请首先包含一个到该文章的链接。此外,你应该包含该文章的一个摘要(其中包含一个返回到 HTML 格式的源的链接)以及文本。

**示例方案:**用户希望共享在你的应用中共享文章中的某个选择内容。这种情况下,HTML 格式最准确地反映用户的意向。你还应该包含用户的选择内容的文本版本。实现这一目标的推荐方法是使用 MSApp.createDataPackageFromSelection

此表可以有助于你确定作为源应用应支持的格式。

应用支持的主要数据类型 推荐的主要 DataPackage 格式 其他建议
不带格式的纯文本 文本 WebLink,如果文本为网页链接。
链接 WebLink 文本
带格式的内容/HTML HTML

文本,如果内容仅包含文本。

WebLink,如果内容为一个链接。

文件 存储项
单个图像 存储项
多个文件和图像 存储项

 

当你希望使用比标准格式更具体的格式时,还支持使用自定义格式。这些自定义格式可以基于标准数据架构(如在 http://www.schema.org 上找到的架构),也可以是你所定义的特定于你的应用的格式。

为目标应用选择数据格式

对于目标应用,建议你尝试支持尽可能多的格式类型。这有助于确保不论何时用户希望共享,应用都可以作为选项提供。但是,就像源应用一样,如果你没有计划接收某种类型的数据,那么你不应该支持这种特殊格式。例如,仅接受文本的应用不应该注册它支持位图。

以下是应支持的格式的一些建议。

应用支持的主要数据类型 推荐的主要 DataPackage 格式 其他建议
不带格式的纯文本 文本
链接 WebLink 文本
带格式的内容/HTML HTML

文本

WebLink

文件 StorageItems
单个图像 StorageItems
多个文件和图像 StorageItems
特定文件类型(例如 .docx) 带有特定文件扩展名的 StorageItems

 

如果你的应用可以支持多种格式且所有其他格式都存在于共享的内容中,则建议你仅处理与你的应用最相关的格式。例如,如果你的应用共享链接且收到同时带有链接和一些文本的共享内容,则你的应用应仅处理该链接。

有时,你的应用可能会从接收的数据(该数据包含的信息多于标准格式提供的信息)中受益。例如,库应用可能要接收文本,但仅当该文本具有书籍相关内容。 自定义格式在此种情况下受支持。这些自定义格式可以基于标准数据架构(如在 http://www.schema.org 上找到的架构),也可以是你所定义的特定于你的应用的格式。

使用基于架构的格式

(作为源应用或作为目标应用)希望共享数据的机会很多,这些数据比标准格式提供的数据更具体。例如,关注影片的应用可能希望共享有关影片的信息,并需要诸如标题、分级、导演等等的详细信息。关注书籍的应用可能希望共享有关书籍的信息,包括作者、标题以及出版日期。如果你的应用归入到此种类别,建议你支持 http://www.schema.org 上所列多种架构之一。

如果希望共享使用这些架构之一的数据,以下是操作方法:

  1. 标识用户要共享的项(书籍、影片等等)。
  2. 收集与项相关的信息并采用 JavaScript 对象表示法 (JSON) 格式将该信息打包。
  3. 使用 setDataDataPackage 中添加内容。执行该操作时,必须包含格式 ID。目前,使用 http://schema.org/<schema> 作为 ID。例如,http://schema.org/Book

此示例阐明了如何共享自定义格式的数据。

var book = {
    "type" : "http://schema.org/Book",
    "properties" : 
    {
         "image" : "http://sourceurl.com/catcher-in-the-rye-book-cover.jpg",
         "name" : "The Catcher in the Rye",
         "bookFormat" : "http://schema.org/Paperback",
         "author" : "http://sourceurl.com/author/jd_salinger.html",
         "numberOfPages" : 224,
         "publisher" : "Little, Brown, and Company",
         "datePublished" : "1991-05-01",
         "inLanguage" : "English",
         "isbn" : "0316769487"
    }
};
book = JSON.stringify(book);

function shareCustomData() {
    var dataTransferManager = Windows.ApplicationModel.DataTransfer.DataTransferManager.getForCurrentView();
    dataTransferManager.addEventListener("datarequested", function (e) {
        var request = e.request;
        request.data.setData("http://schema.org/Book", book);
    });
}

注意,我们在 DataPackage 中仅包含单个数据格式。这样,用户选择的任何目标应用都会了解所期望的内容。

如果希望接收使用这些架构之一的数据,以下是你需要执行的步骤:

  1. 编辑包清单以声明你的应用为共享目标。参阅我们的快速入门以了解如何执行此操作。
  2. 在包清单中,添加可标识应用所支持架构的数据格式。将 http://schema.org/<schema> 用作数据格式。例如,http://schema.org/Book
  3. 在共享操作过程中,使用 getDataAsyncDataPackageView 对象中获取接收的内容。

此示例阐明了如何接收以自定义格式共享的数据。

if (shareOperation.data.contains("http://schema.org/Book")) {
    shareOperation.data.getTextAsync(("http://schema.org/Book").done(function (customFormatString) {
        var customFormatObject = JSON.parse(customFormatString);
        if (customFormatObject) {
            // This sample expects the custom format to be of type http://schema.org/Book
            if (customFormatObject.type === "http://schema.org/Book") {
                customFormatString = "Type: " + customFormatObject.type;
                if (customFormatObject.properties) {
                    customFormatString += "\nImage: " 
                            + customFormatObject.properties.image
                            + "\nName: " + customFormatObject.properties.name
                            + "\nBook Format: " + customFormatObject.properties.bookFormat
                            + "\nAuthor: " + customFormatObject.properties.author
                            + "\nNumber of Pages: " + customFormatObject.properties.numberOfPages
                            + "\nPublisher: " + customFormatObject.properties.publisher
                            + "\nDate Published: " + customFormatObject.properties.datePublished
                            + "\nIn Language: " + customFormatObject.properties.inLanguage
                            + "\nISBN: " + customFormatObject.properties.isbn;
                }
            }
        }
    });
}

使用自定义格式

如果你无法在 http://schema.org/docs/full.htm 上找到满足应用需求的架构,那么你还可以创建自己的自定义格式。如果你决定创建自己的自定义格式,那么需要记住以下几个关键事项:

  • 自定义格式的名称非常重要。源应用和目标应用使用的名称必须相同。
  • 你必须发布该格式。这样,要使用该格式的开发人员便会知道他们需要如何封装内容。

我们在用于创建自定义数据格式的指南中涵盖了这些信息以及其他详细注意事项。

相关主题

共享内容源应用示例

共享内容目标应用示例

快速入门:共享内容

快速入门:接收共享内容